知识卡片
模块的边界,应该划在"一项设计决定能单独改变"的地方
内容
信息隐藏结构里,每个模块都封装着一个”秘密”——一项设计决定,只要这项决定改变时不会波及其他模块,它就有资格自成一个模块。判断”A是不是B的子模块”的检验标准很具体:能不能改变A的秘密而完全不触碰B的其他部分,如果做不到,说明这个划分方式本身有问题,A和B之间存在着没被识别出来的隐藏依赖。这比”按功能分模块”或”按团队分模块”更本质——它把模块化直接和”未来的变更成本”绑定,而不是和当下的组织结构或功能列表绑定,这正是面向对象里”把易变的字段封装成私有属性”这一直觉的更早、更一般化的理论来源。
参考来源
《架构之美》第1章《架构概述》