知识卡片

细粒度模块划分技巧:通用模块的分离

普通读书笔记卡

内容

通用模块的分离有利于提高重用性、减少重复代码——从结构化方法开始,软件研发就一直重视模块化和通用模块的分离,这不是新话题,但真正做到位需要具体的判断标准。判断标准和扇入扇出有关:高层模块应有较高的扇出(调用别的模块多),低层模块特别是底层模块应有较高的扇入(被别的模块调用多)——扇入越大,说明该模块被更多的上级模块共享,也就越值得被独立提炼成通用模块;具体手段是运用参数化、抽象等设计手段提炼通用模块,供其他多个模块调用,从而避免程序的重复实现。这个技巧背后还有一层更深的原理:不同的通用程度意味着变化的可能性不同,把通用性不同的部分分离开,不仅有利于”通用部分”被重用,还有利于对”专用部分”进行修改——书中用一座高楼大厦做类比:大厦要想稳固,必须考虑不同部分的热胀冷缩系数差异,如果把不同”膨胀比”的部分硬连接在一起,反而容易在温度变化时引起”开裂”;软件架构同理,把变化速率不同的部分(通用的、稳定的部分 vs 专用的、易变的部分)强行耦合在一起,专用部分一旦需要修改,改动很容易波及本该保持稳定的通用部分,造成意料之外的连锁反应。由此可以得出一条更精炼的结论:可重用性和可修改性,很大程度上是”同一件事的两面”而已——一个模块如果被设计得容易被安全地重用(边界清晰、职责单一),往往也意味着它容易被安全地独立修改(改动不会波及边界之外),两者背后依赖的是同一种”边界清晰、职责分离”的设计能力。

参考来源

- 位置:《软件架构设计:程序员向架构师转型必备》第15章《模块划分的4步骤方法——运用层、模块、功能模块、用例驱动》"15.2.2 细粒度模块的划分技巧"节"【技能项】通用模块的分离"(源文件:_epub-src/OEBPS/text00018.html) - 结论依据:原文说明"高层模块应有较高的扇出,低层模块特别是底层模块应有较高的扇入……扇入越大,表示该模块被更多的上级模块共享",并用高楼大厦热胀冷缩的类比说明"由此看来:事实上,可重用性和可修改性,很大程度上是'同一件事的两面'而已",直接支撑本卡片结论。 - 原始内容:高层模块应有较高的扇出,低层模块特别是底层模块应有较高的扇入……即使将不同"膨胀比"的部分硬连接在一起也容易引起"开裂"……可重用性和可修改性,很大程度上是"同一件事的两面"而已。