何时分?何时合?

2022-05-10  本文已影响0人  全新的饭

给定的2个功能,应该把它们放到一起实现,还是各自实现各自的?

分或合的依据:哪个能降低使用功能者的使用成本(理解、操作……)
即降低复杂度。

无限细分的坏处:增加了复杂度

  1. 模块太多,要找到目标模块很难
  2. 需要增加额外代码去管理一组关系稍近(需一起使用来实现一项功能)的模块
  3. 依赖关系太多,增加认知成本
  4. 可能会出现重复内容

两个功能的关系

关系紧密的就应放在一起,不紧密的就应分开。
怎样判断两个功能是否相关?
它们是实现一项功能过程中的不同步骤,在更高的抽象中归属于同一概念,需要一并了解之后才能看懂它们是干嘛用的。

可以将它们包一层后再供外部调用。

何时合?

合了之后能简化接口。
合了之后能消除重复。

重复

对待重复有2种处理方式

  1. 提取重复的部分生成新模块,其他地方调用它。
    重复的部分越长,这种做法越有价值。
    需注意:提取重复后,是否需传入很多参数才能用?考虑将这些参数包成一个数据结构传入。
  2. 重复真的有必要?
    修改实现流程(只要保证最终功能仍可实现)可能就可以减少重复。

通用代码和专用代码

当你发现你在不同的地方写了几乎相同的代码内容,这说明你当前的抽象架构可能不够合理。
越底层越通用,越顶层越专用:将专用代码尽量放到较高层,将通用代码留在底层。

方法的拆分和合并

核心目标:提供简单明晰的抽象,降低使用者的使用成本。
其接口(签名)比具体实现应简单得多。

结论

分或合的依据是怎样能更好地降低复杂度。
理想状态:

  1. 隐藏尽量多的信息(用起来简单)
  2. 依赖尽量少(开发者理解起来简单,方便修改)
  3. 接口尽量深(开发者理解起来简单,方便修改)

当前大前提是:能提供满足需求的功能。

上一篇 下一篇

猜你喜欢

热点阅读