原书:《程序员的底层思维》 | 作者:张建飞
7.1.1 管道模式
例如 Linux 中的管道
|
|
7.1.2 责任链模式
责任链模式和管道模式在结构上非常相似,它们都由一组对象形成了一个处理请求的链表。
管道模式与责任链模式的区别
- 在管道模式中,每个管道都需要处理请求
- 在中责任链模式中,每个功能模块都有处理请求的责任,但最终这个请求只会被链条中满足条件的那个功能模块处理
在假期乘坐高铁出游时,我们可以经历以上两种模式
管道模式
乘坐高铁时,无论你去哪,都必须经过的管道
核验身份(刷身份证/刷脸) → | 安检 → | 通过检票口 → | 在站台候车 → | 登上高铁 |
责任链模式
假设我们从上海(起点)出发,乘坐开往北京(终点)的列车,虽然途经下列城市,但你只会在到达目的地(其中一站)后下车,不用在每站都下车
上海(起点)→ | 南京 → | 天津 → | 北京(终点) |
增加人手有时会让项目进度更糟
布鲁克斯定律(《人月神话》一书中提出):向进度落后的项目中增加人手,只会使项目更加落后
— 7.2.2 y 轴拆分
- 人员带来的协作成本会抵消生产力
- 协调团队努力的沟通成本时团队规模的平方,因此随着团队规模不断扩大,研发人员把越来越多的时间花费在协调上,生产力会不断降低
8.3.3 连贯接口设计
重要作用:限定方法调用的顺序
比如,在构建状态机的时候,我们只有在调用了 from 方法后才能调用 to 方法,Builder 模式没有这个功能
10 解藕思维
两种主要方式:
- 依赖倒置解藕
- 中间层映射解藕
10.2 依赖倒置解藕
书中描述:有两个模块 A 和 B,本来 A 是直接依赖 B 的,依赖方向是 A -> B,通过增加一个抽象 C,然后让模块 B 去实现这个抽象, 从而反转了依赖的方向,变成 B -> A,这就是依赖倒置。
我的理解:以幼儿园老师告诉小朋友怎么做糖醋排骨为例
直接依赖:做糖醋排骨时要放镇江香醋,巴拉巴拉…… 当小朋友发现家里没有镇江香醋时,就会一本正经的告诉爸爸妈妈一定要镇江香醋!
依赖倒置:做糖醋排骨时要放醋,巴拉巴拉…… 只要家里有醋,小朋友就能开心的看着爸爸妈妈为他制作香喷喷的糖醋排骨!
11.4 掌握标准制定权
SPI (Service Provider Interface),它可以帮助我们反转依赖的方向,化被动为主动。
SPI 的意思是,我需要这样的服务,而且我已经把标准(Interface)定义好了,你提供的服务必须按我的规则来。
13.3 TestsContainer 小工具
测试工具,当容器启动比较耗时的时候,这个工具特别有用,用法摘要:
启动TestsContainer
- 运行测试类,在命令行中输入类全称:com.alibaba.cola.test.Demo
- 运行单个方法,在命令行中输入方法引用:com.alibaba.cola.test.Demo#testTwo
- 重复运行,输入r
还有一个 GitHub 人气项目 Testcontainers 支持多语言
书中链接文档
- 链接 4-1
- 链接 4-2
- 链接 8-1
- 链接 8-2 Fluent Interface
- 链接 8-3
- 链接 10-1 The Clean Architecture
- 链接 11-1 COLA
- 链接 11-2
- 链接 11-3 Google API 文档
- 链接 11-4 微软 Organize the API design around resources
- 链接 12-1 事务脚本
- 链接 13-1
- 链接 13-2 MyBatis-Plus
- 链接 13-3 Infrastructure as Code
- 链接 14-1 Cannot Measure Productivity
- 链接 14-2
- 链接 16-1 ACM 产品
- 链接 16-2 ACM 产品帮助文档
- 链接 18-1 COLA
- 链接 18-2 Transaction Script
- 链接 18-3 COLA1.0
- 链接 18-4
- 链接 18-5 抽象、低内聚、难变更,你还在用“堆栈”组织代码? | 原文章为“How to organize your code?”