知识卡片
架构是一系列有层次的决策:两种决策树
内容
架构属于设计,但并非所有设计都属于架构——区分两者的标准是这个决策对整体质量、并行开发、适应变化等方面是否有重大影响,重大影响的决策才算架构决策(模块如何划分、每个模块职责为何、接口如何定义、模块间交互机制、技术如何选型、如何满足约束和质量属性、如何适应变化等),影响较小的决策则归入详细设计环节。实际的架构设计过程往往是分层次依次展开的一棵”决策树”,书中区分出两种典型的决策树类型:切分类决策树——比如设计一个C/S系统时经历”决定采用C/S架构,系统包含Client和Server→决定将Server分为三层→决定将Server的引擎层划分为N个模块”这样层层细化的切分过程;技术选型类决策树——比如设计一个B/S系统时经历”决定B/S前端采用JSP技术→具体到Framework选Struts”这样层层落地的选型过程。书中用一个设备调试系统的完整案例演示了切分类决策树的实际展开:第一步理解需求(此时系统是黑盒子,只有实时显示设备状态、支持调试命令、易于测试、高性能这些需求目标);第二步首轮决策,把系统切分成桌面应用和嵌入式应用两个相对独立的部分,并决定它们通过串口RS232协议通信,桌面应用负责模拟控制台和状态显示、嵌入式应用负责设备控制和状态数据读取;第三步及后续步骤继续细化,比如把桌面应用内部再切分出通信层(负责在RS232协议之上实现专用应用协议)和应用层(负责设备状态显示和调试命令发送)。这个案例说明架构设计不是一次性拍板,而是从粗粒度切分逐步走向细粒度切分的迭代过程,每一步决策都要问”架构的哪些目标还未达成”,直到划分出的每个单元都能清楚地回答自己该如何高效完成职责。
参考来源
- 位置:《软件架构设计:程序员向架构师转型必备》第2章《解析软件架构概念》"2.2.2 软件架构是一系列有层次的决策"节(源文件:_epub-src/OEBPS/text00005.html)
- 结论依据:原文用设备调试系统案例逐步展示"理解需求(黑盒)→首轮决策(切分为桌面应用和嵌入式应用,决定用RS232通信)→继续决策(桌面应用内部再切分通信层和应用层)"的完整决策树展开过程,并区分C/S系统的"切分类决策"和B/S系统的"技术选型类决策"两种决策树类型,直接支撑本卡片结论。
- 原始内容:而此例中的设备调试系统则不同,它有两个相对独立的应用组成:一个桌面应用和一个嵌入式应用。那么,它们如何通信呢?最终决定,将它们通过串口连接,采用RS232协议进行通信。