知识卡片
细粒度模块划分技巧:分区与深度优先开发
内容
[[细粒度模块技巧分层细化]]是纵向在层内部再切分层次,”分区”这个技巧则是把层内支持不同功能组的职责分别”封装”到细粒度模块中,从而让每个粗粒度”功能模块”由一组位于不同”层”的细粒度模块组成——这正是[[从功能组到功能模块的核心原理]](第12章”从功能组到功能模块”)技巧在细粒度层面的延伸应用。分区的价值要放到”深度优先开发”这个更大的实践场景里理解:对于任何有挑战性的软件系统,如果架构设计止于粗粒度分层或止于功能模块划分,”深度优先”这种开发模式就很难实施——只有同时考虑”分层+分区”才能识别出细粒度”模块”,而基于细粒度模块的协作链,正是进行深度优先式开发的基础。有经验的实践者都知道,架构是迭代开发的基础,因为只有在架构的支持下才能”深度优先”地先开发完一个功能、再开发下一个功能,一个个功能依次交付,构成每个迭代周期——如果架构设计只停留在粗粒度分层(比如只知道”这属于UI层、那属于业务层”),团队没办法把某一个具体功能从UI到数据存储完整地贯穿实现一遍并验证效果,因为每一层里到底哪个细粒度模块负责这个功能都还没有明确,只能等所有层都大致完工才能拼装、联调,这就退化成了”广度优先”或瀑布式的开发方式。理解分区的意义,本质上是理解它和迭代开发之间的因果关系:不是先有迭代开发的意愿、再倒逼团队做细粒度划分,而是必须先做到分层+分区这个细粒度划分,深度优先的迭代开发才有可能真正落地。
参考来源
- 位置:《软件架构设计:程序员向架构师转型必备》第15章《模块划分的4步骤方法——运用层、模块、功能模块、用例驱动》"15.2.2 细粒度模块的划分技巧"节"【技能项】分区"(源文件:_epub-src/OEBPS/text00018.html)
- 结论依据:原文说明"对于任何有挑战性的软件系统,如果架构设计止于粗粒度分层(或者止于功能模块划分),那么'深度优先'开发模式就很难实施;而同时考虑'分层+分区'则可以识别细粒度'模块',基于细粒度模块的协作链正是进行'深度优先'式开发的基础",直接支撑本卡片结论。
- 原始内容:如果架构设计止于粗粒度分层(或者止于功能模块划分),那么"深度优先"开发模式就很难实施;而同时考虑"分层+分区"则可以识别细粒度"模块",基于细粒度模块的协作链正是进行"深度优先"式开发的基础。