知识卡片
保持可选项:策略与细节脱钩,让实现决策尽可能推迟
内容
延续[[软件的两个价值维度行为价值与架构价值]]的判断——架构价值比行为价值更根本,因为它正是软件”软”的原因——软件保持”软”的具体做法,是在设计中尽可能长时间保留尽可能多的可选项。所有软件系统都可以拆解为策略与细节两种元素:策略承载业务规则与操作过程,是系统真正的价值所在;细节则是让人、其他系统、程序员与策略交互、但不影响策略本身的部分,比如I/O设备、数据库、Web系统、服务器、框架、交互协议。架构师的目标,是让系统以策略为最基本元素,让细节与策略脱钩,从而能推迟或延后与细节相关的决策:开发早期不必选定数据库(高层策略不该关心底层是关系型、分布式、多级还是纯文本文件)、不必选定Web发布形式(高层策略若能与HTML/AJAX/JSP等脱钩,这个选择可以推到项目最后阶段,甚至可能压根不需要考虑)、不必过早采用REST或微服务/SOA框架、也不必过早引入依赖注入框架——这些都不该是高层策略需要操心的事。推迟决策的收益是双重的:项目越往后走,掌握的信息越充分,决策质量自然更高;同时保留可选项的时间越长,就有越多机会用不同数据库、不同Web框架做实验,检验系统与它们的适配性和性能。即便公司已经预先指定了某个数据库或框架,优秀的架构师也应该假装这个决策还没定下来,尽可能长时间保留系统推迟或修改这个决策的能力——最大化可选项数量,本身就是架构师该追求的目标。
参考来源
- 位置:《架构整洁之道》第15章《什么是软件架构》"保持可选项"(源文件:_epub-src/text/part0014_split_000.html)
- 结论依据:原文将软件系统拆解为策略与细节两种元素,说明架构师应让高层策略与数据库/Web发布形式/REST/微服务框架/依赖注入框架这些细节脱钩以推迟决策,并指出推迟决策能带来更充分的信息与更多实验机会,直接支撑本卡片结论。
- 原始内容:基本上,所有的软件系统都可以降解为策略与细节这两种主要元素……在开发的早期阶段应该无须选择数据库系统,因为软件的高层策略不应该关心其底层到底使用哪一种数据库……一个优秀的软件架构师应该致力于最大化可选项数量。