知识卡片
质量决定论的局限:功能与架构并非相互独立
内容
“架构设计是由质量属性决定的”这种观点(简称质量决定论)有一个流行的理论支撑——《软件构架实践》提出”商业目的决定了系统架构必须满足的一些质量属性,这些质量属性高于对系统功能的基本要求”“功能性和质量属性是正交的”“在大量可能的结构中,可以通过使用任意一个结构来实现功能性”“由此,功能性在很大程度上是独立于结构的”。这种”功能独立于结构”的说法看似有道理,但可以用一个简单的反问揭穿它的问题:如果只让你设计一个”高性能”架构,却不告诉你功能需求(可能是银行系统、也可能是电信系统或汽车电子系统),你能设计出来吗?答案显然是不能——质量属性再重要,也不能说明功能需求不重要。本书的立场是:功能和架构是相互影响的,质量和架构也是相互影响的,最终功能、质量、约束这三大类需求都在影响架构设计,而不存在某一类需求”高于”或”独立于”另一类需求的绝对关系——这正是第5章讲过的”不同需求影响架构的原理不同”(功能靠职责协作链、质量靠进一步质疑、约束靠三种转化方式)背后的统一立场。质量决定论的错误根源和用例驱动论一样:都是把需求这个多维度的整体,简化成了某一个单一维度说了算,只是简化的方向不同——用例驱动论把功能需求当成唯一驱动力,质量决定论把质量属性当成唯一驱动力,两者都遗漏了架构设计真正需要综合权衡的另外两类需求。
参考来源
- 位置:《软件架构设计:程序员向架构师转型必备》第8章《确定关键需求》"8.1.2 质量决定论"节(源文件:_epub-src/OEBPS/text00011.html)
- 结论依据:原文引用《软件构架实践》"功能性在很大程度上是独立于结构的"这一观点,并用"你设计个'高性能'架构给我看看,至于功能需求还不知道,银行、电信、汽车电子都有可能"的反问揭示其局限,最终提出"本书的观点是功能和架构是相互影响的、质量和架构也是相互影响的",直接支撑本卡片结论。
- 原始内容:你设计个"高性能"架构给我看看,至于功能需求还不知道,银行、电信、汽车电子都有可能……对比而言,本书的观点是功能和架构是相互影响的、质量和架构也是相互影响的。