知识卡片
描述需求与描述设计的序列图区别:内外对话vs内部协作
内容
序列图看起来是同一种UML图,但用来描述需求和用来描述设计时,画的内容本质完全不同——分清这个区别,是从用例过渡到模块划分的关键。描述设计的序列图刻画的是”内部协作”:需要obj1、obj2、obj3这几个对象相互协作才能完成一个用例——obj1接收系统外部actor的请求(”消息1”),调用obj2(”消息1.1”),obj2处理完返回(”消息1.2”),obj1重新获得控制权后再响应外部actor(”消息2”)。如果在这幅序列图中明确标出”系统(System)”这条边界线,就能一目了然地看出:”消息1”“消息2”“消息3”这类跨越系统边界、发生在外部actor和system之间的消息来自需求(经典的记录方式是《用例规约》的”事件流”小节),而”消息1.1”“消息1.2”“消息3.1”这类完全发生在系统内部、不跨边界的消息才是出自架构师的设计。描述需求的序列图刻画的是”内外对话”:《用例规约》通常用文本方式描述事件流,每个句子的主语要么是”各种外部actor”,要么是作为黑盒的”待开发系统”,整体呈现的是一幅系统与外部世界对话的场景;如果愿意,也完全可以不用文本、改用序列图方式刻画事件流,此时序列图展现的依然是”待开发系统”和”各种外部Actor”之间的对话,而不涉及系统内部任何一个对象。从”内外对话”到”内部协作”,也就是打破黑盒、设计出系统内部具体由哪些对象协作完成外部看到的那套行为,正是从用例到设计过渡的关键——需求级的、用例规约里刻画的”actor和system黑盒的交互序列”,到了设计阶段要被真正支持起来,变成设计级的、序列图里刻画的”actor和N个设计对象的交互序列”。
参考来源
- 位置:《软件架构设计:程序员向架构师转型必备》第14章《用例驱动的模块划分过程》"14.1.1 描述'内外对话'vs.描述'内部协作'"及"14.1.2 《用例规约》这样描述'内外对话'"节(源文件:_epub-src/OEBPS/text00017.html)
- 结论依据:原文说明"'消息1'、'消息2'和'消息3'来自需求,因为它们刻画的是外部actor和system的'对话过程'……而'消息1.1'、'消息1.2'、'消息3.1'和'消息3.1.1'等才是出自架构师的设计",并总结"从'内外对话'到'内部协作',打破黑盒、设计内部,就是从用例到设计过渡的关键",直接支撑本卡片结论。
- 原始内容:描述需求的序列图,描述的是"内外对话"。描述设计的序列图,描述的是"内部协作"。从"内外对话"到"内部协作",打破黑盒、设计内部,就是从用例到设计过渡的关键。