Skip to content

Commit 45aa3fa

Browse files
committed
feat(再看设计原则): add 设计基础/article.md
1 parent 065da25 commit 45aa3fa

File tree

5 files changed

+96
-1
lines changed

5 files changed

+96
-1
lines changed

doc/第三轮.org

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,6 @@ ECS:heros ->heroes
126126

127127

128128

129-
* TODO 补充“更多资料推荐”
129+
* TODO 补充“更多资料推荐”
130+
131+

doc/第四轮.org

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
* TODO 删除注释文字
2+
13
* TODO 修改结构,改成正式成书的结构(use markdown)
24

35

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# 为什么要设计
2+
3+
- 这个世界处于不断的变化中,需求也在不断的变化
4+
- 为了应对需求的变化,减少变化影响的范围,我们需要进行设计
5+
6+
# 如何进行设计
7+
8+
- 基本方法是什么?
9+
以抽象、封装为基本方法
10+
11+
- 评判标准是什么?
12+
以高内聚、低耦合为评判标准
13+
14+
- 指导思想是什么?
15+
以设计原则为指导思想
16+
17+
18+
# 抽象
19+
20+
抽象的定义:
21+
从众多的具体事物中,抽取共同的、本质的属性
22+
23+
TODO tu
24+
如上图所示,展示了抽象的过程:
25+
左上的图片展示了一个具有最多细节的、具体的牛;
26+
然后从上往下,从左往右地不断进行抽象;
27+
最后抽象成了右下的图片中的牛,只剩下最基本的牛的框架
28+
29+
30+
更多的抽象案例:
31+
- “红色、黄色、紫色”抽象为“颜色”
32+
- “黑人、白人、黄人”抽象为“人”
33+
- “鸡、鸭、鹅”抽象为“鸟”,它们具有共同的外观:头、身体、爪子、翅膀,以及共同的行为:吃、飞
34+
TODO tu
35+
36+
37+
38+
## 做项目的时候哪些地方用到了抽象?
39+
40+
可以说抽象无处不在
41+
如在重构方面,消除重复代码时需要进行抽象,抽取它们共同的特性;
42+
在设计方面,设计架构时需要进行抽象,抽取各个视图(如数据视图、层次视图、服务视图等)下的本质属性(如数据视图只抽取数据相关的本质属性);
43+
在测试方面,写测试用例时需要进行抽象,抽取在用户的视角下被测试的代码有哪些行为
44+
45+
46+
# 封装
47+
48+
封装的定义:
49+
隐藏对象的属性和实现细节,仅对外公开接口;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体
50+
51+
TODO tu
52+
如上图所示,展示了封装的一个例子:
53+
上方的图片展示了一只鸡的内部细节,包括各种器官等;
54+
下方的图片展示了封装后的结果,隐藏了内部细节,形成了“鸡”这个整体
55+
56+
57+
## 做项目的时候哪些地方用到了封装?
58+
59+
封装跟抽象一样,可以说无处不在
60+
如在重构方面,重命名函数名时需要进行封装,使其不暴露内部的细节,而只显示这个函数的抽象行为,让用户只看函数名就知道它是做什么的,而不需要去看它的具体代码;
61+
在设计方面, 设计接口时需要进行封装,隐藏细节;
62+
在测试方面,写测试用例时需要进行封装,用例名不应该暴露内部的细节,而只显示该用例的抽象行为,让用户只看用例名就知道它是做什么的,而不需要去看它的具体测试代码
63+
64+
65+
66+
67+
68+
# 高内聚、低耦合
69+
70+
在软件设计中通常用内聚度和耦合度作为衡量模块独立程度的标准
71+
我们希望内聚度高,耦合度低
72+
73+
内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。
74+
耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂,耦合度越高,牵一发而动全身。
75+
目的:使得模块的“可重用性”、“移植性”大大增强
76+
77+
78+
<!-- TODO tu
79+
(TODO 需要去除水印) -->
80+
81+
82+
83+
84+
85+
86+
87+

packages/多线程模式/article.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1690,6 +1690,8 @@ export let exec: execType<worldState> = (worldState, _) => {
16901690

16911691
运行截图跟之前一样
16921692

1693+
可以通打印的Job信息以及查看Chrome控制台的Performance的时间线,来验证确实是并行地运行了线程
1694+
16931695

16941696
值得注意的是:
16951697
因为使用了浏览器的SharedArrayBuffer API,所以需要启用浏览器的“跨域隔离”,打开Cross Origin

多线程模式抽象代码/worker_pipeline_abstract/src/main/Main.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ export let getPipeline = (): pipeline<worldState, state> => {
104104
{
105105
"name": "get_finish_send_init_xWorker_data_main_worker",
106106
"type_": "job",
107+
//is_set_state为false的意思是该Job不更新state
108+
//这通常用在merge的job,该job没有操作state
107109
is_set_state: false
108110
}
109111
]

0 commit comments

Comments
 (0)