知识卡片

平台与框架:"大到看不见"与"小到看不见"的两种极致

结构图卡

内容

系统架构面临一对天然矛盾:架构既要反映系统的长期不变性,又不能让这种不变性成为阶段性实现的负担——太追求长远会拖累当下交付,只顾眼前又会让架构反复推倒重来。平台(platform)与框架(framework)是这对矛盾的两个解,分别沿相反方向把自己”做到看不见”。平台以数据为核心,力求”大到看不见”:它把自己做得足够庞大、足够基础,大到使用者感受不到它的边界,就像操作系统或数据库对上层应用而言”总是在那里”、不构成一个需要被特别对待的依赖对象。框架以逻辑为核心,力求”小到看不见”:它把自己的存在感压缩到最低,只提供必要的逻辑骨架和调用约定,小到不会对使用它的具体业务代码构成额外的认知负担或结构性影响。这里”看不见”的准确含义,不是指平台或框架本身没有技术复杂度或者不重要,而是指它不应对其他部件(无论是使用它的上层业务、还是与它并存的其他部件)构成额外的影响——一旦某个平台或框架的存在开始要求周围部件为迁就它而做出结构性调整,它就没有做到真正的”看不见”,这对矛盾就没有被真正解开。可迁移启发:评估一个中间件、SDK或基础设施选型是不是”平台/框架级”的好设计,可以问一个具体问题——如果换掉它,周围的业务代码需要因此发生多大范围的结构性改动?改动范围越小,说明它越接近”看不见”这个理想状态;如果换一个数据库中间件就要求业务层大改数据访问模式,说明这个中间件其实没有真正做到”大到看不见”。

结构图

flowchart LR
  M["矛盾:架构要反映长期不变性<br/>又不能成为阶段实现的负担"]
  M --> P["平台(platform)<br/>以数据为核心<br/>大到看不见"]
  M --> F["框架(framework)<br/>以逻辑为核心<br/>小到看不见"]
  P --> X["看不见=不对周围部件构成额外影响<br/>(非指不重要/不复杂)"]
  F --> X

参考来源

- 位置:《我的架构思想:基本模型、理论与原则》第5章《系统架构与决策》之"5.5 平台与框架"(源文件:_epub-src/ch015.xhtml) - 结论依据:原文说明系统架构需要反映系统的长期不变性,但又不能使之成为当前实现阶段的负担,"这一对矛盾的解决方案,正是'平台'与'框架'……平台以数据为核心,追求的是'大到看不见';框架以逻辑为核心,追求的是'小到看不见'……'看不见'并不是说它不重要或不存在,而是说它不应当对其他部件构成额外的影响", 直接支撑本卡关于两种"看不见"的结构图与含义辨析。 - 原始内容:所谓"看不见",指的是这一部件不应当对其他部件(无论是它所服务的对象,还是与它并存的其他部件)构成额外的影响。