知识卡片

序列图"先大局、后细节"的建模技巧

普通读书笔记卡

内容

[[用例驱动模块划分的两环节四步骤]]第一步的技术2是运用序列图明确类之间的交互关系——UML图”怎么画”是相对简单的事,”画什么”才是最难的,因为后者就是设计工作本身,所以设计者应该培养”运用UML图辅助思维、启发思考”的能力,特别是要积累高效建模的技巧,”先大局、后细节”就是其中之一。延续WinZip压缩功能案例:通过[[WinZip案例鲁棒图发现实现用例需要的类]]识别出了界面(UI)、压缩器(Zipper)、打包器(Packager)、监听器(Listener)、压缩配置(ArchiveCmd)等类之后,画序列图时先勾勒大局——界面负责和用户交互,之后创建一个名为cmd的ArchiveCmd类实例;界面调用压缩器的Zip()方法,传递参数cmd;压缩器进行循环处理,循环继续的条件是还能成功”Get Next File(得到下一个待压缩文件)”;针对每个file都要进行压缩处理,这里面还涉及内存缓冲保存、最终写入压缩包、分卷处理等许多具体设计——但这一步不急着展开这些细节,先把它们统一封装到一个ZipOneFile(file)方法里。这样做的好处是可以”分层次”地步步推进建模:先把整体调用骨架画清楚,再专门针对ZipOneFile()内部的处理过程单独进行下一轮设计,而不是试图在第一张序列图里就把从界面交互到分卷压缩的所有细节一次性画全。这条技巧的可迁移价值在于:面对任何一个内部逻辑复杂的功能,与其在一张图里堆砌所有细节导致图本身变得难以理解,不如先用一个抽象的方法名(如ZipOneFile)代表”这里以后要展开的复杂逻辑”,让第一轮序列图聚焦于交代清楚整体的调用骨架和控制流转,把具体细节留给后续针对性的追加设计。

参考来源

- 位置:《软件架构设计:程序员向架构师转型必备》第14章《用例驱动的模块划分过程》"14.2.2 第1步:实现用例需要哪些类"节"技术2:运用序列图,明确类之间的交互关系"(源文件:_epub-src/OEBPS/text00017.html) - 结论依据:原文说明"针对每个file,都要进行压缩处理,其中还会涉及在内存中缓冲保存、最终写入压缩包、分卷处理等许多设计,因此不要一下展开这些设计,先封装到一个ZipOneFile(file)方法中",并总结"这样做的好处是可以'分层次'地步步推进建模,更有利于设计思维的有效展开",直接支撑本卡片结论。 - 原始内容:运用"先大局、后细节"的设计思维:界面负责和用户交互,之后界面创建一个对象名为cmd的ArchiveCmd类实例……因此不要一下展开这些设计,先封装到一个ZipOneFile(file)方法中。