知识卡片
层次/并列/嵌套三种结构,对应平台/库/框架的不变性选择
内容
把多个领域方框摆在一个平面上表达它们之间”没有关系或仅有殊少关系”,只有三种基本方法:层次结构、并列结构、嵌套结构。选择依据是”如何隔离变化”——系统的复杂性很大一部分来自可变性,而任何系统既有可变处也必有不变处,三种结构分别适合表达三种不同的”不变”:如果系统的公共部分不变,适合用层次结构表示,把捕捉到的不变公共部分放在底层、可变部分放在上层,这样系统的基底部分总能保持稳定,这正是构建[[平台与框架看不见的两种极致|平台(platform)]]的过程,其基础领域倾向于不变;如果系统的总量不变——即拆分本身不增加系统的复杂性,只是把总规模分解成多个互不相关的部分——适合用并列结构表示,这是构建库(library)的过程,其领域总量倾向于不变;如果系统的核心不变——即除核心之外的所有其他领域都必然与该核心发生关系——适合用嵌套结构表示,这是构建[[平台与框架看不见的两种极致|框架(framework)]]的过程,其核心领域或核心过程倾向于不变。三种结构因此不是三种可以随意互换的画图风格,而是分别对应了系统里三种不同性质的”不变量”,选错了结构就等于选错了要保护的不变性。可迁移启发:设计一个可复用组件之前,先问它到底是”总量不变”(库)、”公共基座不变”(平台)还是”核心逻辑不变”(框架),这个判断直接决定了应该用并列、层次还是嵌套的方式去组织它的内部结构。
结构图:
flowchart TB
Q["三种平面表达结构"]
Q --> L["层次结构<br/>公共部分不变→底层"]
Q --> P["并列结构<br/>系统总量不变→互不相关的并列域"]
Q --> N["嵌套结构<br/>核心不变→其余域必与核心发生关系"]
L --> LP["构建平台(platform)<br/>基础领域倾向于不变"]
P --> PP["构建库(library)<br/>领域总量倾向于不变"]
N --> NP["构建框架(framework)<br/>核心领域/过程倾向于不变"]
参考来源
- 位置:《我的架构思想:基本模型、理论与原则》第6章《架构的表达与逻辑》之"6.3 对系统或其构件的不变性的表达:平台、框架与库"(源文件:_epub-src/ch016.xhtml)
- 结论依据:原文说明"如果一个系统的公共部分是不变的,那么它适合用层次结构来表示;如果一个系统的总量是不变的,那么它适合用并列结构来表示;如果一个系统的核心是不变的,那么它适合用嵌套结构来表示……层次结构适宜构建平台的过程……并列结构适宜构建库的过程……嵌套结构适宜构建框架的过程", 直接支撑本卡三种结构对应三种不变性的结构图。
- 原始内容:就"系统架构"的整体表达来看,层次结构适宜构建平台(platform)的过程,其基础领域倾向于不变;并列结构适宜构建库(library)的过程,其领域总量倾向于不变;嵌套结构适宜构建框架(framework)的过程,其核心领域(或核心过程)是倾向于不变的。