第二部分 模式

用10个模式族、51个模式形成可反向检索的参考,并为每次选择记录适用条件、替代方案和代价。

学习目标

  • 能用问题、语境和约束从10个模式族中定位候选,而不是按流行框架挑选51个模式
  • 能用 TypeScript 记录模式机制、协作关系、替代方案、失败边界和验证证据
  • 能在基线、临界和受控故障场景中复核模式选择,并说明何时撤回

为什么第二部分模式值得单独学习

第二部分模式不是采购清单,而是一套可检索参考:10个模式族、51个模式分别回答不同的业务和技术压力。模式名只有在当前问题、语境、力量、方案和结果都能对上时才有意义;同一个“服务”或“仓储”名词,也可能只是项目命名而不是模式证据。

帮助读者先定位问题空间,再比较同族候选。本页依据 2024 年中文版公开目录限定第二部分范围,并根据 Martin Fowler 的作者图书页和模式目录独立重写;目录只决定要讲什么,案例、实验、判断题和答案均为本课程原创。

让评审从名字进入可观察的变化,而不是停留在术语层。

先建立直觉:选择必须可撤回

不是把模式数量最大化,而是解释组合为何能减少变化或风险。

让“为什么不用另一个模式”成为决策的一部分。

把模式选择从口头偏好变成可审计、可撤回的假设。

对第二部分模式,优先比较的替代路线是:先写 Selection Problem,定位 Pattern Family,再比较 Pattern Mechanism 和 Collaborating Patterns,用 Alternative 与 Decision Record 完成取舍。若只展示成功路径,不记录代价和撤回条件,就不能据此选择第二部分模式。

目录单元到教学证据

第二部分模式

第二部分模式要求把参考目录变成可复核证据:冻结版次、应用切片与目录坐标;从问题与语境比较候选模式;手算远程、映射或冲突成本;验证正常样本与恰好边界;只注入一个故障并定位首差;让独立复核者重放并接入发布门禁。本文把这些证据映射到订单系统架构评审的反向索引和决策卡中。

专属代码案例:订单系统架构评审

把订单评审切成“问题识别 → Pattern Family → Pattern Mechanism → Collaborating Patterns → Alternative → Decision Record”六个观察点。设计草案必须写出谁拥有状态、谁作出业务决定、失败怎样传播,以及10个模式族、51个模式、使用时机、协作模式和失败边界中哪个指标最先提示当前方案不再适用。

设计记录采用五个可换行字段:单元键为 poeaa24-part-02-patterns;模式族为 book;裁决是“能按问题而非流行框架选择模式,并用基线、临界与受控故障场景验证”;观测项包括10个模式族、51个模式、使用时机、协作模式、失败边界;拒绝条件是“把目录节点或框架默认行为当成 Pattern Mechanism”。

先预测:订单查询出现重复数据库往返时,应该从数据源族、领域逻辑族还是分布族开始?先记录往返画像、聚合边界和部署关系,再列至少两个候选;验证时要能指出每个候选减少了什么,也要说明新增的复杂度。

type DecisionRecord = {
  problem: string;
  family: string;
  candidates: string[];
  mechanism: string;
  evidence: string[];
  alternative: string;
  rejection: string;
};
 
function isReproducible(record: DecisionRecord): boolean {
  return (
    record.problem.trim().length > 0 &&
    record.family.trim().length > 0 &&
    record.candidates.length >= 2 &&
    record.mechanism.trim().length > 0 &&
    record.evidence.length >= 2 &&
    record.alternative.trim().length > 0 &&
    record.rejection.trim().length > 0
  );
}

这段代码把模式选择的最小证据合同固定下来:必须有问题、模式族、至少两个候选、机制、两项证据、替代方案和拒绝条件。它不替团队裁决,只保证评审不会在缺字段时伪装成确定结论。

10个模式族与51个模式

模式列表图用于建立全书参考坐标;它不要求读者逐个实现,而是帮助读者从一个问题反查模式族、候选和协作关系。

模式目录:10 族 × 51 模式POEAA领域逻辑 (4)Transaction Script · Domain ModelTable Module · Service Layer数据源 (4)Table Data Gateway · Row Data GatewayActive Record · Data Mapper对象关系行为 (3)Unit of Work · Identity Map · Lazy Load对象关系结构 (6)Identity Field · Foreign Key · Association TableDependent Mapping · Embedded Value · Serialized LOB继承映射 (4)Single Table · Class Table · Concrete Table · Inheritance MappersWeb 表示 (7)MVC · Page Controller · Front ControllerTemplate View · Transform ViewTwo Step View · Application Controller分布 (2)Remote Facade · Data Transfer Object离线并发 (4)Optimistic Lock · Pessimistic LockCoarse-Grained Lock · Implicit Lock会话状态 (3)Client Session · Server Session · Database Session基础 (5)Gateway · Mapper · Layer SupertypeSeparated Interface · Registry51 个模式按 10 个族索引,每族标注模式数量和成员
全书 51 个模式按 10 个族分类索引。左列:领域逻辑、数据源、对象关系(行为/结构/继承)。 右列:Web 表示、分布、离线并发、会话状态、基础。

模式选择闭环

先从问题定位模式族,再比较机制、协作和替代方案,最后用基线、临界和受控故障验证。证据不支持收益时,应回退到更简单的方案,而不是继续增加模式。

第二部分:模式选择闭环问题与约束Selection Problem所有者 + 失败边界冻结应用切片模式族与机制Pattern FamilyPattern Mechanism协作关系 + 新成本验证与撤回AlternativeDecision Record基线 → 临界 → 故障证据不足时回退到更简单的候选,并记录拒绝理由模式选择是可复核、可撤回的决策闭环
从问题定位模式族,再比较机制与替代方案,最后用证据决定保留或撤回模式。

选择与拒绝矩阵

评审问题选择第二部分模式参考的证据应拒绝当前方案的信号
定位Selection Problem 能指向明确 Pattern Family只按框架或团队习惯选族
机制Pattern Mechanism 对应可观察收益和成本只读定义,无法说明改变了什么
协作Collaborating Patterns 的所有者与失败路径清楚多个模式重复拥有状态或规则
取舍Alternative、证据和撤回条件都已记录没有拒绝候选,默认永远保留复杂度

常见误区

可验证练习

练习

本组练习覆盖第二部分模式,并要求把问题、模式族、机制、替代和证据映射到订单评审。

问题 1:定位模式族。 订单查询的主要问题是跨进程调用次数过多,应该怎样开始检索?

问题 2:比较候选。 两个模式都能减少数据库访问,如何让评审具有可复核性?

问题 3:决定撤回。 模式在正常样本中略有收益,但故障恢复复杂度超过团队预算,是否仍应保留?

名词解释

名词解释

本章出现的专业名词,用大白话再讲一遍。

Pattern Family

组织一组解决相近问题的模式分类,用于先定位问题空间再比较候选。

Pattern Mechanism

模式改变责任、依赖、状态或数据流的具体方式及其收益和成本。

Collaborating Patterns

多个模式在同一应用切片中承担互补责任的关系。

Alternative

与当前候选解决相同或相邻问题、需要被比较并写出拒绝条件的方案。

Decision Record

记录问题、候选、机制、证据、代价和拒绝条件的可复核评审结果。

本章小结

掌握第二部分模式的标志不是记住10个模式族和51个模式名称,而是能在订单评审中解释“问题 → 模式族 → 机制 → 协作 → 替代 → 决策记录”的责任链。学习者应利用使用时机、协作模式、失败边界和验证证据作出可证伪的选择,并在模式收藏、无替代比较和只验证成功路径时明确拒绝当前方案。

前后导航

来源与改写范围

资料与写作方式声明

本章以Martin Fowler《企业应用架构模式》与公开模式目录权威目录界定学习范围,并结合正文列出的技术资料独立重写;不宣称复现原书正文,也不沿用原作表述。

原作版权归作者与出版社所有;本站原创教学结构与表述仅供学习交流。

讨论

评论区加载中…