知识卡片

尖叫的架构:目录结构该"喊"出用例,而非框架名字

普通读书笔记卡

内容

优秀的建筑设计图一眼就能”喊”出这栋建筑是什么——单户住宅的图纸里大门连着起居室、隔壁是餐厅厨房;图书馆的图纸里超大入口连着签到办公区、阅读区、书架排列,整个设计都在明确昭示建筑的用途。软件系统的架构设计理应做到同样的事:查看应用程序的顶层目录结构和源代码,它究竟在喊”健康管理系统”“账务系统”“库存管理系统”,还是在喊”Rails”“Spring/Hibernate”“ASP”这类技术名词?Ivar Jacobson的《Object Oriented Software Engineering》副标题”A Use Case Driven Approach”点出了核心观点:软件的系统架构应该为系统用例提供支持,架构图应该像建筑图凸显用途一样,明确凸显应用程序有哪些用例——架构设计不该是、也不该基于某个框架来完成,框架只是一个可用的工具手段,如果架构是围着框架设计的,就不可能同时是围着用例设计的。良好架构设计的核心目标,是能在脱离框架、工具、使用环境的情况下完整描述用例——正如住宅建筑设计首要目标是满足居住需求,而非确保一定要用砖来建造,架构师该花精力确保架构在满足用例前提下,允许用户自由选择”建筑材料”,尽可能推迟延后是否采用Rails、Spring、Hibernate、Tomcat、MySQL这类环境相关工具的决策,并让这些决策容易被改变。Web同样只是一种交付手段、一种I/O设备,采用Web交付只是实现细节,不该主导整个项目的结构设计——是否以Web形式交付,本身就该是一个被推迟的决策,一个系统理应能在不改动基础架构设计的前提下,被交付成命令行程序、Web程序、富客户端程序或Web服务程序中的任何一种形式。

参考来源

- 位置:《架构整洁之道》第21章《尖叫的软件架构》引言"架构设计的主题""架构设计的核心目标""那Web呢"(源文件:_epub-src/text/part0014_split_006.html) - 结论依据:原文用住宅与图书馆建筑图一眼可辨用途的类比,引用Jacobson"用例驱动设计"的观点,说明架构应凸显用例而非框架,并指出Web只是一种I/O交付手段、不该主导项目结构设计,直接支撑本卡片结论。 - 原始内容:它们究竟是在喊"健康管理系统""账务系统""库存管理系统",还是在喊:"Rails""Spring/Hibernate""ASP"这样的技术名词呢?……软件的系统架构应该为该系统的用例提供支持……Web只是一种交付手段——一种IO设备。