Skip to content

Commit

Permalink
feat(再看设计原则): finish update
Browse files Browse the repository at this point in the history
  • Loading branch information
yyc-git committed May 5, 2023
1 parent f5ded4b commit 82c63d6
Show file tree
Hide file tree
Showing 15 changed files with 91 additions and 76 deletions.
5 changes: 5 additions & 0 deletions doc/第四轮.org
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,11 @@ engineState = World.registerAllPipelines(engineState)

* TODO 修改结构,改成正式成书的结构(use markdown)

** TODO 确定标题

** TODO 整理合并段落语句



* TODO 更新代码库,给出索引、how to run

Expand Down
19 changes: 11 additions & 8 deletions packages/再看设计原则/依赖倒置原则/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@
所谓的高层、低层模块是按照依赖的方向来定的,如模块1依赖模块2,我们就说相对而言,模块1属于高层模块,模块2属于低层模块


“抽象”在函数式编程的代码中指的就是接口或者类型
“细节”在函数式编程的代码中指的就是模块或者函数
<!-- “抽象”在函数式编程的代码中指的就是接口或者类型
“细节”在函数式编程的代码中指的就是模块或者函数 -->

“抽象”在代码中具体指的就是接口或者类型
“细节”在代码中具体指的就是模块或者函数

依赖倒置原则具体是指模块或者函数之间不应该直接依赖,而应该是依赖于它们的接口或者类型

Expand All @@ -23,7 +26,7 @@
- 减少细节之间的耦合性
- 便于替换细节
- 提高系统的稳定性
- 降低并行开发细节时引起的风险
<!-- - 降低并行开发细节时引起的风险 -->
- 提高代码的可读性和可维护性


Expand Down Expand Up @@ -98,17 +101,17 @@ export let read = (technicalBook: technicalBook, novelBook: novelBook, needReadB
```
Client
```ts
//选择让读者读小说书
//这里选择让读者读小说书
Reader.read(TechnicalBook, NovelBook, "novel")
```

因为Reader依赖了每类书,所以每增加一类书,Reader都需要对应修改代码
这里的问题是因为Reader依赖了每类书,所以每增加一类书,Reader都需要对应修改代码
我们将其改为符合依赖倒置原则,解除Reader与每类书的依赖
修改后的领域模型如下:
TODO tu

现在提出了书的接口Book,让Reader改为依赖接口,而不依赖它的实现模块
这样做的好处是只要Book这个接口不变,它的实现模块的变化不会影响到Reader
现在提出了书的接口:Book,让Reader改为依赖书的接口,而不依赖书的实现模块
这样做的好处是只要Book接口不变,它的实现模块的变化不会影响到Reader


修改后的伪代码如下:
Expand Down Expand Up @@ -144,6 +147,6 @@ export let read = (book: Book) => {
```
Client
```ts
//选择让读者读小说书
//这里选择让读者读小说书
Reader.read(NovelBook)
```
18 changes: 9 additions & 9 deletions packages/再看设计原则/单一职责原则/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

如果一个模块或者函数做了多件事情,那么应该将其拆分

从函数名上就能看出该函数是否符合单一职责原则,如getAndSetData这个函数名一看就知道做了两件事情,所以应该将其拆分为getData、setData这两个函数
从函数名上就能看出该函数是否符合单一职责原则,如“getAndSetData”这个函数名一看就知道做了两件事情,所以应该将其拆分为getData、setData这两个函数


如果一个模块或者函数做了多件事情,有下面的缺点:
Expand All @@ -20,14 +20,14 @@

TODO tu
上图是操作书的接口,它不符合单一职责原则
这是因为它的getBookID、setBookID函数是对书的数据的操作,而它的addBook函数则是对书的行为的操作
这是因为它的getBookID、setBookID函数是对书的数据的操作,而它的addBook函数则是对书的行为的操作,所以该接口做了两件事情

应该将其拆分为两个接口,拆分后的接口如下图所示:
应该将其拆分为两个接口,每个接口只做一件事情。拆分后的接口如下图所示:
TODO tu

BookData负责操作书的数据
BookAction负责操作书的行为
原来的BookInfo改为实现BookData和BookAction
BookData接口负责操作书的数据
BookAction接口负责操作书的行为
原来的BookInfo接口改为实现BookData接口和BookAction接口


# 案例2
Expand All @@ -41,10 +41,10 @@ type phone = number

type changeUser = (newUserData: [userName, phone]) => void
```
上面代码是一个函数的签名
从签名可知,该函数不符合单一职责原则,这是因为它的形参是一个元组,包含了多个新的用户值,这说明该函数做了多件事情
上面的代码是一个函数(changeUser)的签名
从签名可知,该函数不符合单一职责原则,这是因为它的形参是一个元组,包含了多个数据,这说明该函数做了多件事情
应该将其拆分为多个函数,拆分后的函数签名如下所示:
应该将其拆分为多个函数,每个函数只做一件事情。拆分后的函数签名如下所示:
```ts
type userName = string

Expand Down
2 changes: 1 addition & 1 deletion packages/再看设计原则/合成复用原则/4.drawio
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<mxfile host="Electron" modified="2023-04-18T02:28:30.180Z" agent="5.0 (Macintosh; Intel Mac OS X 11_4_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.6.13 Chrome/89.0.4389.128 Electron/12.0.7 Safari/537.36" etag="DBZiWmPP3EysNReaY4CD" version="14.6.13" type="device"><diagram id="BcbrSCJRCYaBFs7ZQtxQ" name="第 1 页">7VnbctowEP0aPaaDb2A/YiC9TNLJNJlJ0zfFVrAa2cvIIkC+vpItW74AJbeWB2aYwXu0kqU9e1ZIIGeSrj9zvEguISYM2YN4jZwpsm3LGgzll0I2JeJ7dgnMOY21kwGu6TPR4ECjSxqTvOUoAJigizYYQZaRSLQwzDms2m4PwNpvXeA56QHXEWZ99JbGItGrsEcG/0LoPKnebA2DsiXFlbNeSZ7gGFYNyJkhZ8IBRPmUrieEqeBVcSn7ne9orSfGSSYO6fD0fXy3ur3+Npqwr7+sH96t+L46sxw9ObGpVkxiGQBtAhcJzCHDbGbQkMMyi4kadiAt43MBsJCgJcHfRIiNZhMvBUgoESnTrXLGfPNT9y+MO2V88ipzum42Tje1FY8Vp9LMICMlck4Z0+25wFzot9rDsrlpFu3VCDHFKWTxTUKzqqkxVBkWFYud4dZQDksekX0x1mmL+ZyIPX5BnRRSTQRSIpcu+3HCsKBP7Xlgndbz2s8wLx80+S9JhHLcJ8yW+k1o5qJwrD7dDMlXNGW4iP8DZKJKFsUsZnQuwzmNZJQIl8AT4YJKOY11g1ApEkYJZfEF3sBSBUTGPnqsrDABTp/lsLjKliarntvyuFY9NWOc5NLnqiLI6kCXeN1yvMC50EAEjOFFTu/rZaSSK5qFIASk2qlYaTkJx64TRC2PrPenSJ/SqsNIlwZdG52q6K1MpbFcjSWNKjO0PygL7H4WdMlntCA+Fxwe65KoYvYgxTMBBtyos8oGRh7EllxIaRwXBSVf4Ihm85uifJxZBrkoOk4dg/zQUXCKOiSwwCVriiKG7wm7gpwKCmp8XvqGC6CZKELlhcibFggXE8jkIjAtuCIyG1ZEZcRhxO7WUJ9tza5M3YPI9T9K4VaPy39a6k11v2sV9x2lfk1Fo5u07hotppMyDt0e3rGmuwfW9NEba3rRVS4KbxoOOp/NyFcKMHXF8b1WXXHdzi+Djr832usvH8oZmNyrl/L6dHS3bDgBCkLkj9DMQ4GFAv+083zQzuNYHcb9/73zeKed5w07j3vUO89oi9RHKJRSP1cPwQD5w5PUP0jq3uDYpO6fpP4Gqe/4RXEkUg+2SN1HYyny4sEPUNhn+yT195G6ax3bebKawEnrr9L6jhuhI9G6dcBtQeNIds9AaeuQw2HdtvsesHGsM5d81rAj7wJABx/7XntF12DA20JAhb3s1Nc7ptU7d+eYVg9Rnlp1r33nPbszkNMZqIxDb6C/H/2kaS60S3fzt4Az+wM=</diagram></mxfile>
<mxfile host="Electron" modified="2023-05-05T07:43:38.508Z" agent="5.0 (Macintosh; Intel Mac OS X 11_4_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.6.13 Chrome/89.0.4389.128 Electron/12.0.7 Safari/537.36" etag="8oMD1tiYEFegGjE9vF2u" version="14.6.13" type="device"><diagram id="BcbrSCJRCYaBFs7ZQtxQ" name="第 1 页">7Vldc5s6EP01euwd82Xg0dhOe++knUzTmTR9U0AxagXrEXJs99dfCQkE2HFoJ2n94JlMhj27EmjPnlWkIG9e7N5zvM4/QkYYcifZDnkL5LrTwJW/FbDXgD/1NLDiNNOQY4Fb+pMYcGLQDc1I1QsUAEzQdR9MoSxJKnoY5hy2/bBHYP23rvGKHAC3KWaH6B3NRK7RyA0t/oHQVd682ZnG2lPgJtispMpxBtsO5C2RN+cAQj8VuzlhKndNXvS4q2e87YdxUooxA54+ze63d7f/hXP27zfnc3AnPm3fOYaNSuybFZNMJsCYwEUOKygxW1o04bApM6KmnUjLxlwDrCXoSPA7EWJv2MQbARLKRcGMV34x338142vjXhn/BI252HWdi31rZTPFqTRLKIlGrihjxl8JzIV5qzvV7q5Z+5sZMooLKLMvOS0bV2eqw+yahFew4Sk5lVJTpZiviDgRZ+pEpbvzAsPdewIFkUuXAZwwLOhTvx6xKetVG2eZlw+G/F8pBD3vE2Yb8ya09FEyUz/DCqm2tGC4zv8jlKIpFsUsZnQl07lIZdoIl8AT4YJKOc2MQ6gSSdKcsuwa72GjMiRzn/5orCQHTn/KaXFTLV1WA78XcatGGsY4qWTMTcOYM4A+4l0v8BpXwgApMIbXFX1ol1FI8miZgBBQmKB6pfojPPdUgagVk91JShtvaFqD6Y1e0/S2ttM4vsHyTpeZum9UBe5hFQzJZ7QmvhIcfrQtUeXsUYpnDgy4VWdTDYw8iiO1UNAsqxtKtcYpLVdf6vbxzrHIdT1w4Vnks8mCV/chgQXWrCmKGH4g7AYqKiio+bmOTdZAS1GnKkhQsKgRLuZQykVgWtNHZDVsiaqII8SeFMzLbBt2ZemOIjd6K4U7B1z+0VZvu/t9r7k/0+p3VHSGSeu+47GDlDF2e/j9nu6P7Onha/f0eqhcFN53Akw925lvFGD7ihcFvb7i+4O/DAbxQXgyXj7oL7C11y7l98vRP7LhxChOUBSiZYBiB8XRZed5o53HcwaMR3975wkuO8/YnccfzfaZ7DzhEamHKJFSv1IP8QRF04vU30jqweTcpB5dpD5W6uFots9E6vERqUdoJkVeP0QxSg7Zvkj9daTuO+d2nmw+4KL1l7Uej6b7TLTujLgt6BzJHhgobY05HLa+5+8BO8c6e8nnTAfyroFnlfVqV3QdBoIjBDTYr536Do5p7c49OKa1U+hjrBl16rznDibyBhPpxBxM9PLRT5r2QluH2/8KeMv/AQ==</diagram></mxfile>
18 changes: 8 additions & 10 deletions packages/再看设计原则/合成复用原则/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

# 补充说明

“继承”属于面向对象编程,函数式编程中没有“继承”的概念
但是,函数式编程其实也可以实现“继承”,只需要把“类”换成“模块”即可。
“继承”属于面向对象编程的概念,函数式编程中没有“继承”的概念
但是,函数式编程其实也可以实现面向对象编程中的“继承”,只是把继承的对象从 “类”换成“模块”即可。
如Rescript作为一个函数式编程语言,支持在一个模块B中引入另一个模块A,使B获得A所有的成员,这就相当于实现了B继承A

相关代码如下:
Expand Down Expand Up @@ -54,27 +54,25 @@ TODO tu

我们来看下组合的优缺点:
组合的优点:
- 组合保持了封装,因为新模块看不到已有模块的细节,新模块只能通过已有模块的接口来访问它
- 组合维持了封装,因为新模块看不到已有模块的细节,新模块只能通过已有模块的接口来访问它
<!-- - 能够通过装饰器模式等方法来包装组合 -->
- 组合是动态的,在运行时能改变组合关系

组合的缺点:
- 模块的数量会比较多



继承关系属于“Is-A”的关系,而组合关系却属于“Has-A”的关系
继承关系属于“Is-A”的关系,组合关系属于“Has-A”的关系

# 案例1

TODO tu
如上图所示,因为雇员、学生都是人,它们与人是“Is-A”的关系,所以它们的关系是继承关系
如上图所示,因为雇员、经理都是人,它们与人是“Is-A”的关系,所以它们的关系是继承关系

实际上,雇员、经理是两种角色,而人可以同时有几种不同的角色
如一个人可以既是雇员又是经理,然而这里使用继承的话,每个人就只能有一种角色,这不是很合理
如一个人可以既是雇员又是经理,然而这里因为使用了继承,所以每个人就只能是雇员或者经理

因此,我们将它们由继承关系改为组合关系,修改后的领域模型如下:
因此,我们将继承关系改为组合关系,修改后的领域模型如下:
TODO tu

现在,一个人可以通过组合不同的角色,来拥有多个角色,所以人与角色是“Has-A”的关系
现在,因为人与角色是“Has-A”的关系,所以一个人可以通过组合不同的角色,来实现一个人既是雇员又是经理

2 changes: 1 addition & 1 deletion packages/再看设计原则/开闭原则/1.drawio
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<mxfile host="Electron" modified="2023-04-18T02:28:35.753Z" agent="5.0 (Macintosh; Intel Mac OS X 11_4_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.6.13 Chrome/89.0.4389.128 Electron/12.0.7 Safari/537.36" etag="w4z7V1eVmkrfjJgIRWqx" version="14.6.13" type="device"><diagram id="MIss146aAQmY1lY--RN7" name="第 1 页">7VhtT9swEP41lbYPoLw0fflICmyTYEJ00sa+mcRNDE6ucq604dfPjp23pi1lXSeE+JTe47Nj3/PcOdeeO0lWXwSZx9cQUt5zrHDVc897jmO7li0fCskNYlmORiLBQoPVwJQ909LRoAsW0qzliAAc2bwNBpCmNMAWRoSAZdttBrz91jmJaAeYBoR30Z8sxFijI2dY418pi+LyzfZgrEcSUjqbk2QxCWHZgNyLnjsRAKh/JasJ5Sp6ZVz0vMsto9XGBE1xnwnffz/E+eJ2Nud5PhZo3bFvyYltlskwL09MQxkAY4LAGCJICb+oUV/AIg2pWtaSVu1zBTCXoC3BB4qYGzbJAkFCMSbcjNI0PFPcSDPgJMtYoMFLxkuXDIlAs4A90MNtE0X+S23hVEnKAHcFIFkogfOV2aW28qZ1QwVLKFJhQB0JdfytES6jBQsR0F1hNUolIqK4w8+tdCAziILcjcjlPEE5QfbU3gcxSo4qv2rqDTC5Q8cyaedZRnJl0o3WltD7MrNqycgfjW3UUCGk14hKv+2J8IU5woQDxlMEQTtyy5Ys4SRVuppBiqXyFIOEsyhVGpHxVyz5T1Qgk7l5ZgZQ6c0PYsbDK5LDQoVaCid4LC0/BsGe5bJkk668fstjqmYaLQiaSZ+bknp7Dbomq5bjFcnQAAFwTuYZu6+Okchos9QHREiMU3FSvQnXqaSnjkdXu8XXFUs5ob9GumfsZV22qqoaN0rWwNmur5YyXisDpyODDvmcFcRnKOCxqq8qZjNZCSbAQeVmCoVTqQZOZ7hBCwkLw6I6ZXMSsDT6UdSiE7tGroqJ526N3JoouEVRQ4JEs6Yo4uSe8hvIGDJQ6wvt689V1hSh8vyed14gAieQykMQVnBFpRqWVCliP2K3J1GXbcOulO5e5I6OxK27gdsB1yfWT6ZydkZkmXQGkRkonz3HtVWMi7LwlirC2HpHFcGzvJcrgrdBNHZ/cCTZeB8l4YCSsOVrwdA73pPdY5WEwQZuffWZIVhAP33uEC2PjxXRa8S+nmud+G1a+11aFQRy7owXX5+xVAhNN1DdptSXYZxYp54i15lI267tF/luZLaM/RH5H+3Hf/9YAijvn//dS1SNgNdsA/6qBWg0JvccVO1vtCVWtwvpdCn/sIcY7tlDDA7sIQ7ifNhJ+h/TmAl8S5d6f/SeLvW1z3x36HTS3h5tSHvvWHf66ONOP6CmD3fW9H63pm8k9/UlXZr1X0+68a//wXMv/gA=</diagram></mxfile>
<mxfile host="Electron" modified="2023-05-05T08:32:37.309Z" agent="5.0 (Macintosh; Intel Mac OS X 11_4_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.6.13 Chrome/89.0.4389.128 Electron/12.0.7 Safari/537.36" etag="rcRBI31Z80uXpHo5DQJs" version="14.6.13" type="device"><diagram id="MIss146aAQmY1lY--RN7" name="第 1 页">7Vhdj5s4FP01SLsPUwEOJHkcmKS7UmaVbSp1Z9884IBbg1ljJqG/fm1s8xGYTKZtqqrqE/j42tj3nHvtiwXC7PiWwSK9pzEilmvHRwvcWa7rAM8RD4nUCln6tgIShmNt1AE7/Blp0JhVOEblwJBTSjguhmBE8xxFfIBBxuhhaLanZPjVAiZoBOwiSMboBxzzVKELd97hfyCcpObLjr9UPRk0xnonZQpjeuhBYGWBkFHK1Vt2DBGRzjN+UePWz/S2C2Mo55cM+Ovfj2ldvdsXpK6XjNsP+M/sxtHTlLw2O0axcIBuUsZTmtAcklWHBoxWeYzktLZodTYbSgsBOgL8iDivNZuw4lRAKc+I7kV5fCu5Ec2IwLLEkQLXmBiTkkPG9QSOr7qHTc7qf+QS3ti2a4CHBhAsGODuqFepWnW/tUUMZ4gjpsGxQ41zaMUidM6LWpiQJYifsQPKTnq49wFN11tExWpYLQwYIpDjp6EEoVZy0tq1Q7cUiyW7to46z9aS0zHnLE6mUAvVozrJiJfeMjqoEdJrRKW+9gRJpbcQEsrTHacMjeRWHnBGYC51tac5N8qTDEKCk1xqRBAiWQqeEONYxOat7uBSb0GUYhJvYE0r6XshnOiTaQUpZfizmBZO6cqbDSx2cqTWAkOlsNkaLTgn0D08Dgw3sOQaiCghsCjxY7uNTHgb5wHlnGbaqNmpWgRwz0lP7hgdz4rF9M5OSPd0+9ClrTarpr2U5bvP62ugjNfKwB3JYEQ+wQ3xJWf0U5tfpc/2IhOElFAZmzltjIwaCNrzCS1kOI6b7FQWMMJ58r7JRTdOh2yagXegQ95pL4AmqXHIoWJNUkTgIyJbWmKOqZyfKdugkFHTuMoLLO+uQRgPaS42AXFDHxJqOCCpiAliz0bMy2xrdoV0LyJ3cSVuwQS3PlE7Vk8sY3YPRd50/UR3mKflAkf6uEkLP1JGWNo/UUbwbO/ljOBNiMaZ+VeSjfcrJVyaEsDFdJub9YXsXisl+BPcBvKawXCEfvt9RLTYFm+JPiH29VyrwB/SOhvTKiEqxu5Jc/tMhUJQPkH1kNJAuDG033iSXDcUbadrv8h3L7KF76/I/+Iy/mfXEoA5f753LdEWAl6/DPiiEqBXmDwSKnN/ryyxx1XIqEr58hpifmEN4X/rGuKrOJ+Pgv79LsWM/0iH+mzxMx3qJ9d8MHdHYe8sJsLeu9aZvvh1pl+a0+cXs10Pc/VL5H6DlL6dP2zCICez+6pOV3DtZn+jiUreXO+ltAck+/9V1HTclI3ob4UBcItj19nWAKu5FQArUC+BtVx35cNaTW2KhdM8ksJCvlYZWTOYSSUcUszRroBNej0wWAwPCOM7tyk5Wq/Nng/QET8TMftsgM78YYDOx9cyACYoBOb+9goSRbP7f6j+3nR/YcHqfw==</diagram></mxfile>
2 changes: 1 addition & 1 deletion packages/再看设计原则/开闭原则/2.drawio
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<mxfile host="Electron" modified="2023-04-18T02:28:53.772Z" agent="5.0 (Macintosh; Intel Mac OS X 11_4_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.6.13 Chrome/89.0.4389.128 Electron/12.0.7 Safari/537.36" etag="Yvlcl8k0M1LE68lpgr7f" version="14.6.13" type="device"><diagram id="lOc39g2zFMwpDDG7bCKI" name="第 1 页">7Vnbjts2EP0aA+1DAt0tP0b2pi2yabdxgKaPXImS2FAagxqv7Xx9SZG6WfLGW9ebIFjAgM2jIc2Zc+ZItGfustj/Isgmfw8J5TPHSvYzdzVznIXjzNTLSg4amNuWBjLBEg3ZHbBmX6gBm7AtS2g1CEQAjmwzBGMoSxrjACNCwG4YlgIffuuGZHQErGPCx+hfLMFco6Ez7/BfKcvy5pvtYKGvFKQJNplUOUlg14Pcm5m7FACoPxX7JeWqdk1d9Ly3J662GxO0xHMm5KsbyBd/xp+cdP7OEvjb7+8Or8wqFR6ahGki8zdDEJhDBiXhNx0aCdiWCVWrWnLUxdwCbCRoS/AfingwZJItgoRyLLi5SsvkjaJGDmNOqorFGnzLeBNSIRFoFrADfXk4RHH4pLbw2rKcBvi7BiQJDbDam13q0aE/uqOCFRSpMKCuhEr/ZIGbasFWxPSRqhrNyxwyio/Eea0MZPtQkLsRBzlPUE6QPQz3QYyQszaunXoHTO7QsUzP+ZZRnGk5OzxaQu/LzOoUIz/0ttFBtY6eoCmT/QPhW5PCkgPmawRBR3KrdqzgpFS6SqHERnmKQcJZViqNyPorlqIHKpDJ1nxjLqDSWxTnjCe35ABbVWopnPhzM4pyEOyLXJZM6cr3BhFrNdNoQdBKxtw11NtH0HuyHwTekgoNEAPnZFOx+zaNQlablREgQmGC6kz1JlynlZ5Kj+4fF99YLM0E74h034x3nWu1ppr3HCtwTutroIynysAdyWBEPmc18RUK+Nzaq6pZKp1gCRxUb5ZQBzVq4DTFCS0ULElqd6o2JGZl9rH2old2h9zWE1duh3wwVXBrU0OCRLOmKOLknvI7qBgyUOsLHRttVNfUpfKjmb+qEYFLKGUShNVcUamGHVWKOI/Y0000Ztuw63vnkRteiVtvgtuA64z1O1M9mxJpk06QmQvN+8xxbVXj2ha+J0dYWD+QI/iW/3VH8CdEY3vBlWTjv1jCBZZw4mnB0Ls4k91rWUIwwW2kHjMEi+lPP4+IluljS/QRsU/nWjf+kFZvTKuCQM5Nef30mUuF0HKC6iGlkSzj0nrtK3KdpRzb3firfPc6W9b+ivyH5/HvXUsA829zlGjPAX7/FPCfTgC9c8k9B2X9vVOJNT6EjA4p/+MRIjzzCBFceIS4iPJw1PMf1zkT+D3d073wR7qnHz3lu3Nn1PV2ONH1/rVu6YuXW/oFlh4+aune2NInyb2Wo9tjLp/316Fv7sK2NU3Qhb/QBO6wjb1m/Ey/0DRHxV7X/pGmL979rN7theMn9uf1btt+Me8LzPuUOVzdveWw+9tAe0L334t78y8=</diagram></mxfile>
<mxfile host="Electron" modified="2023-05-05T08:32:47.187Z" agent="5.0 (Macintosh; Intel Mac OS X 11_4_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.6.13 Chrome/89.0.4389.128 Electron/12.0.7 Safari/537.36" etag="GSCfw9iFhWwjOWZ3mP38" version="14.6.13" type="device"><diagram id="lOc39g2zFMwpDDG7bCKI" name="第 1 页">7Vlbc6M2GP01zLQP2eFu/Bh8yXbW26b1zjT7qIAANQJRIcf2/vpKSOJiiO1sazezkyejow8hfed8ByQbzizf3VFQZp9JDLFhm/HOcOaGbVuOZ/EfgewlMvVNCaQUxSqoBdboG1SgDtugGFa9QEYIZqjsgxEpChixHgYoJdt+WEJw/6klSOEAWEcAD9E/UcwyiQb2pMU/QpRm+smWP5U9OdDBaiVVBmKy7UDOwnBmlBAmr/LdDGKRPJ0Xed/yhd5mYhQW7JwbsvmCZNPfowc7mXwyKfvl10/7GzVKxfZ6wTDm61dNQllGUlIAvGjRkJJNEUMxqslbbcyKkJKDFgf/goztFZlgwwiHMpZj1QuL+FZQw5sRBlWFIgkuEdYhFQOUqQEsX3b3m4zuH8QUPpimrYGvNcBJ0MB8p2YpW/tu6x5SlEMGqQKH+dTJIRsawSNJtJUuAU0hOxLnyjiR4c4DFFt3kPDZ0D0PoBADhp77CgRKyGkT19x6TxCfsm2qovNMpThVclZwMIScqLqrVQy/6EyjhWodvUJTKh3PAG/UEmaYsGzNCIUDuVVblGNQCF0lpGBaeYJBgFFaCI1wQgRL4TOkDPHSvFUdTOgtjDKE4xXYk43IPRdO9KRbYUYo+saHBWO68txexFrcqbRAYcVj7rUWrAPoM9j1AlegYgqICMagrNBjs4ycZxsVIWGM5CqoXqmchGMfk55YMdwdFYvudQ9I91R727pWY6pZx7F8+2V99ZTxWhk4AxkMyMeoJr5ilDw19ipylnAnmBFMRG0WpA7SasAwYSNayFEc1+5UlSBCRfql9qIbq0VW9Y1zp0X+UFlwalNjgAHJmqAIg0eI70mFGCJifCpjw1JUTZ0qLzS8eY1QNiMFXwRANX2Qq2ELhSJGiD1aMafZVux67nnkBhfi1h3h1sdyxfIXiZpNAPdN209Vh/41bMcSOa5t4S05wtT8gRzBM73TjuCNiMZy/QvJxnu3hHMtwT2bbv1hfSa7l7IEf4TbUHxmUBTBn34eEM2XxRqiD4h9Pdey8Pu0ukNaBUT4vQmuvz4zrhBYjFDdpzTkaZyZHzxBrj3jbattn+S7U9k89xfkPziPf/dSApj8P1uJZh/gdXcB37UD6OxLHjER1t/ZlZjDTchgk/L9W4jgzC2E/19vIf4V5cGg5r+sM0TZW3qnu8GP9E4/+Mp3Jvag6q1gpOq9S73Sp++v9HMtPTib7X3fqk+ReylHt4ZcXvd06NourLdQlz6h8Z1+Gbu6faUTGr3OTtX+liTv3n1V73aD4Rf7db3bsgYyeDfvUyXzFt3b+vj1fk/vpqvqOXmyltnTQ2rdjJErz2aEuHss+39viO64qWrZ3/IAxy53bWdzgLOYGKFjhPIiNKbL9uxnKYfWJz2HTpKBUlxucrykIBdS2GaIwXUJalveUlD23wU6d3Z9XtRkzX25RAf8jFTtiyXq+v0SnQwr1HHGKtQyX00ib7b//Uhjb/9Bcxb/AA==</diagram></mxfile>
Loading

0 comments on commit 82c63d6

Please sign in to comment.