知识卡片

逻辑架构的三个核心设计任务

普通读书笔记卡

内容

逻辑架构关注职责划分和接口定义,不同粒度的职责(逻辑层、功能子系统、模块、关键类)需要被关注,不同通用程度的职责要被分离、分别封装到专门模块、通用模块或通用机制中。核心设计任务有三个。模块划分:软件变得复杂后团队开发成为必然,团队开发又带来管理复杂性——以架构为中心的开发方法通过定义”如何划分模块、模块间如何通过接口交互”,为团队开发提供基础:不同模块可以分配给不同小组分头开发,接口就是小组间合作的”契约”,模块的技术细节被局部化到小组内部,理顺了跨小组沟通的层次,也有利于”人尽其才”(不同小组成员需要精通的技术各不相同)。接口定义:”我的接口我做主”是一种错误观点——如果程序组长只关心自己负责的模块而无视协作需要来设计接口,这样的接口很难被其他模块顺畅使用;正确的设计思路是”协作决定接口”,架构师设计接口时要考虑的重点是”为了实现系统的一系列功能,这个软件单元要和其他哪些单元协作、如何协作”,可以用序列图辅助这个设计过程。领域模型细化:逻辑架构设计到什么粒度是个常见困惑——一般推荐设计到模块一级,但有四种”关键类”应该在架构设计阶段就明确下来:接口定义类、Façade实现类、核心控制类,以及对系统可扩展性有根本影响的、构成领域模型的那些类——这条规则的价值在于给”到底该不该在架构层面细化到类”这个模糊问题提供了一个具体、可操作的判断标准,而不是笼统地说”看情况”。

参考来源

- 位置:《软件架构设计:程序员向架构师转型必备》第10章《细化架构设计》"10.3.1 逻辑架构=模块划分+接口定义+领域模型"节(源文件:_epub-src/OEBPS/text00013.html) - 结论依据:原文说明"正确的设计思路是'协作决定接口'。架构师设计接口时,要考虑的重点是'为了实现软件系统的一系列功能,这个软件单元要和其他哪些单元协作、如何协作'",并列出四种应在架构设计时明确的"关键类",直接支撑本卡片结论。 - 原始内容:类似"我的接口我做主"的观点是错误的……正确的设计思路是"协作决定接口"……如下4种"关键类"可以在架构设计时就明确:(1)接口定义类(2)Façade实现类(3)核心控制类(4)另外,就是对系统可扩展性有根本影响的构成领域模型的那些类。