给定的2个功能,应该把它们放到一起实现,还是各自实现各自的?
分或合的依据:哪个能降低使用功能者的使用成本(理解、操作……)
即降低复杂度。
无限细分的坏处:增加了复杂度
- 模块太多,要找到目标模块很难
- 需要增加额外代码去管理一组关系稍近(需一起使用来实现一项功能)的模块
- 依赖关系太多,增加认知成本
- 可能会出现重复内容
两个功能的关系
关系紧密的就应放在一起,不紧密的就应分开。
怎样判断两个功能是否相关?
它们是实现一项功能过程中的不同步骤,在更高的抽象中归属于同一概念,需要一并了解之后才能看懂它们是干嘛用的。
可以将它们包一层后再供外部调用。
何时合?
合了之后能简化接口。
合了之后能消除重复。
重复
对待重复有2种处理方式
- 提取重复的部分生成新模块,其他地方调用它。
重复的部分越长,这种做法越有价值。
需注意:提取重复后,是否需传入很多参数才能用?考虑将这些参数包成一个数据结构传入。 - 重复真的有必要?
修改实现流程(只要保证最终功能仍可实现)可能就可以减少重复。
通用代码和专用代码
当你发现你在不同的地方写了几乎相同的代码内容,这说明你当前的抽象架构可能不够合理。
越底层越通用,越顶层越专用:将专用代码尽量放到较高层,将通用代码留在底层。
方法的拆分和合并
核心目标:提供简单明晰的抽象,降低使用者的使用成本。
其接口(签名)比具体实现应简单得多。
结论
分或合的依据是怎样能更好地降低复杂度。
理想状态:
- 隐藏尽量多的信息(用起来简单)
- 依赖尽量少(开发者理解起来简单,方便修改)
- 接口尽量深(开发者理解起来简单,方便修改)
当前大前提是:能提供满足需求的功能。
网友评论