《系统架构》读后感摘抄( 四 )


而我认为 , 如果有必要 , 甚至要再往下多分解几层 , 那么我们最多可以分到什么程度呢?最后合理的应该保持在几层呢?
3.3原子部件和模块
我们可以分解到什么程度?古希腊人用“原子”表示不可再分 , 在系统分解中 , 我们将其定义为“原子部件” , 这个定义比较模糊 , 用途不同 , 指代的不同 。比如 , 对于整车厂 , 到零件就可以了 , 典型的如螺栓 , 但对于螺栓零件公司 , 可能还需要再分解为1字头、十字头 , 什么螺纹等 , 比如是用一字头还是十字 。《系统架构》中提到一个基本判断原则:不能再拆解了 , 一经拆解就失去了意义 。
如果每个系统 , 我们都分解到原子部件 , 很容易超出人们的理解程度 , 所以需要降低其表面的复杂度 , 一个重要的方法就是模块化 , 将原子部件集成为各个模块 。我们在使用的模块的时候 , 常常不需要关心模块内部的具体内容 , 只需要知道模块的功能和结构 , 典型的就是芯片的使用 , 对大多数使用芯片的人 , 关心的只是输入和输出 。
模块不仅可以降低表面复杂度 , 而且对系统修理也比较容易 , 常常只需要更换换掉的模块就可以 。那是不是模块化越多越好 , 其实也不然 , 因为如果模块太多 , 那么你就要定义很多的接口 , 而接口的数量的增加其实也会增加复杂度 , 另外 , 模块通常就意味着里面有一些模糊的东西你不知道 , 存在黑箱 , 你是不清楚里面究竟发生了什么?
3.4分解面
对于分解而言 , 除了前面提到的方向和深度 , 还有一个重要方面是——分解面(也叫分解平面) , 通俗讲就是我们从哪个角度进行分解 , 比如对人群 , 我们可以按照年龄、性别 , 职业等进行分解 , 分解面的选择 , 不仅影响人们的理解程度 , 也会影响系统最后功能的涌现以及架构的美观程度 。
以汽车为例 , 我们可以按照构成部分 , 将其分为车身 , 底盘 , 电驱动等 , 也可以按照性能/功能分为加速性能 , 制动性能 , 储物功能 , 舒适性能都等 。在金字塔原理:结构思考 , 清晰表达中 , 我们也分享了多种分类的方式 , 它们也是典型的分解面 。
在《系统架构》中提到了13种常见的分解面 , 最典型的如形式、功能、设计自由度等 。