知识卡片

从好多类到少数模块:用例驱动设计的自底向上精髓

普通读书笔记卡

内容

[[用例驱动模块划分的两环节四步骤]]的第二步——识别出”一堆”类之后,再回过头来梳理出清晰的模块结构——正是用例驱动设计有别于所有”自顶向下”设计方法的最大不同之处,是这套方法论的精髓所在:用例驱动包含了”自底向上”的设计思想。以WinZip压缩案例为例,通过鲁棒图和序列图识别出一批具体的类之后,会发现这些类可以归纳划分为原文件读写层、压缩包读写层、压缩控制层、界面交互层等模块——这个”从好多类,到少数模块”的思维过程,本质上是一种归纳思维:先有大量具体的、细粒度的类,再把它们按内在关联性向上归纳聚合成少数几个模块。对比而言,[[从功能组到功能模块的核心原理]](第12章的功能模块划分)和[[分层架构的核心思想封装外部交互]](第13章的架构分层)都是”自顶向下”思维——先有一个笼统的划分框架(功能组或分层职责),再往里面填充具体内容。这三种思维方式一点也不矛盾,可以兼收并蓄结合使用——这正是[[MailProxy案例分层架构设计的优缺点]]结尾提到的、第15章”模块划分4步骤方法”要综合处理的核心问题:自顶向下的功能模块划分和架构分层负责快速搭出宏观骨架、不容易遗漏功能,自底向上的用例驱动划分负责验证、细化、修正这个骨架是否真的贴合具体功能的实现需要,两种思维方向配合使用,比单独依赖任何一种都更可靠。

参考来源

- 位置:《软件架构设计:程序员向架构师转型必备》第14章《用例驱动的模块划分过程》"14.2.3 第2步:这些类应该划归哪些模块"节(源文件:_epub-src/OEBPS/text00017.html) - 结论依据:原文说明"这一步,是用例驱动设计有别于所有'自顶向下'设计方法的最大不同之处,是用例驱动设计思想的精髓!也就是说,用例驱动包含了'自底向上'的设计思想",并对比第12章功能模块划分、第13章架构分层都是"自顶向下"思维,直接支撑本卡片结论。 - 原始内容:这一步,是用例驱动设计有别于所有"自顶向下"设计方法的最大不同之处,是用例驱动设计思想的精髓!……对比而言,第12章讲的"功能模块划分"、第13章讲的"架构分层",都是"自顶向下"思维。