架构与领域设计总复习
架构与领域设计总复习围绕 6 个章专属概念,以边界模型、决策轨迹、违规恢复和来源分层完成验收。
学习目标
- 能解释“架构与领域设计总复习”如何用一个订单履约切片串联依赖规则、限界上下文、战术模型、上下文映射与可选扩展
- 能逐项定位 政策保护、语言划界、一致性设计、关系治理、扩展取舍、反例验收,并说明每个概念在当前来源边界内承担什么责任
- 能按 选核心规则 → 划模型边界 → 保护依赖方向 → 设计上下文关系 → 用反例删除过度设计 推演“最小订单切片”,检查“每个设计选择都能追溯到一种具体变化压力,并能用边界测试或模型示例证伪”
- 能注入“把所有模式堆进最终架构图,用术语数量代替边界清晰度和运行证据”,依据依赖图、上下文地图、聚合测试、端口合同、读模型延迟、事件重放与模式删除清单定位越界、撤销并用同一情境重放
为什么从“从一个关键业务规则向外展开模型与技术边界,先构造最小可行结构,再让真实压力决定是否增加扩展模式”开始
用一个订单履约切片串联依赖规则、限界上下文、战术模型、上下文映射与可选扩展。本页先画责任和依赖,再沿具体情境执行决策,最后主动制造一个边界违规;这种顺序把术语变成可以验证、推翻和恢复的设计合同。
“架构与领域设计总复习”不是技术采购建议。它处理的是规则放在哪里、模型在哪个语境内成立、哪些变化可以被隔离,以及团队如何判断一条边界已经被穿透。最终功能可运行,只能证明快乐路径存在,不能证明结构允许安全演进。
来源、版次与课程边界
总复习是平台原创综合案例,不对应原书结章。它只组合前述已标明来源的概念,并要求读者证明每种模式的必要性和可撤销边界。
本专题不是某一本既有书的中文版,也不是把多位作者的文章拼成“原著章节”。课程主干分别取自 Eric Evans 的领域驱动设计体系与 Robert C. Martin 的整洁架构体系;CQRS、事件溯源和六边形架构始终标为扩展。以下链接承担不同事实责任:
- Eric Evans: Domain-Driven Design Reference:核对 DDD 定义、模式摘要、增补范围与 CC 授权说明
- Robert C. Martin: The Clean Architecture:核对独立性目标、四层、依赖规则、跨边界控制流与简单边界数据
- Martin Fowler: CQRS:核对命令与查询模型分离、适用压力、复杂度和同步代价
- Martin Fowler: Event Sourcing:核对事件序列作为事实源、状态重建、重放和外部更新问题
- Alistair Cockburn: Hexagonal Architecture:核对内外边界、端口、适配器、无 UI/数据库运行与自动化测试动机
本页采用独立中文重写。能从公开全文或授权摘要核对的定义才作为来源事实;项目情境、交互实验、取舍表和练习答案均为本站教学设计。
核心概念与可观察责任
政策保护
先让订单资格、价格和履约规则独立于界面与数据库运行,以依赖规则验证核心是否被外部细节控制。 在“最小订单切片”中,观察重点是每个设计选择都能追溯到一种具体变化压力,并能用边界测试或模型示例证伪。
语言划界
订单、支付与仓储对状态和参与者有不同含义,应在各自限界上下文内保持语言一致并显式翻译。 在“演进后的履约”中,观察重点是依赖图、上下文地图、聚合测试、端口合同、读模型延迟、事件重放与模式删除清单。
一致性设计
只把必须同步成立的规则放进同一聚合;跨上下文流程通过已发生事实协作,不制造全局大事务。 在“最小订单切片”中,观察重点是每个设计选择都能追溯到一种具体变化压力,并能用边界测试或模型示例证伪。
关系治理
用上下文映射记录团队控制力和语义传播,选择防腐层、客户—供应商或分离时同时写出退出条件。 在“演进后的履约”中,观察重点是依赖图、上下文地图、聚合测试、端口合同、读模型延迟、事件重放与模式删除清单。
扩展取舍
读写压力、历史重建和外部协议隔离分别支持 CQRS、事件溯源与六边形架构,三者没有默认绑定关系。 在“最小订单切片”中,观察重点是每个设计选择都能追溯到一种具体变化压力,并能用边界测试或模型示例证伪。
反例验收
替换数据库、制造投影延迟、重放事件并注入错误翻译,观察第一个边界违例,而不是只验证快乐路径。 在“演进后的履约”中,观察重点是依赖图、上下文地图、聚合测试、端口合同、读模型延迟、事件重放与模式删除清单。
一条可执行的设计判断
本页采用以下判断链:从一个关键业务规则向外展开模型与技术边界,先构造最小可行结构,再让真实压力决定是否增加扩展模式。正常情况下必须持续保持“每个设计选择都能追溯到一种具体变化压力,并能用边界测试或模型示例证伪”;反例“把所有模式堆进最终架构图,用术语数量代替边界清晰度和运行证据”只改变一个关键条件,便于定位因果。
| 观察项 | 本页合同 |
|---|---|
| 最小正常情境 | 创建订单、计算价格并保存,不要求历史重建和专用报表 |
| 边界或迁移情境 | 读模型压力、审计重建和外部仓储协议都已被数据证明 |
| 必须保持 | 每个设计选择都能追溯到一种具体变化压力,并能用边界测试或模型示例证伪 |
| 首要违规 | 把所有模式堆进最终架构图,用术语数量代替边界清晰度和运行证据 |
| 验收证据 | 依赖图、上下文地图、聚合测试、端口合同、读模型延迟、事件重放与模式删除清单 |
先预测,再操作三个本页实验
实验一:边界与模型地图
操作前先预测“最小订单切片”里哪一侧拥有规则、哪一侧只是技术或协作细节。切换概念和情境后,检查“从一个关键业务规则向外展开模型与技术边界,先构造最小可行结构,再让真实压力决定是否增加扩展模式”是否仍能解释三块区域的责任。
Boundary model
架构与领域设计总复习:边界与责任地图
用一个订单履约切片串联依赖规则、限界上下文、战术模型、上下文映射与可选扩展
切换最小情境
定位正式概念
final-review · 当前观察
政策保护:创建订单、计算价格并保存,不要求历史重建和专用报表
语言、实体、值对象与聚合不变量
↓
上下文关系、端口和翻译合同
↓
适配器、投影、事件存储与运行证据
情境验收
先使用用例、领域模型与存储端口,不引入 CQRS 或事件溯源
易错边界与取舍
练习与答案
练习
问题 1:概念—边界—证据对照。 完成以下逐项核对:
- 政策保护:写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。
- 语言划界:写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。
- 一致性设计:写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。
- 关系治理:写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。
- 扩展取舍:写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。
- 反例验收:写出它所在的边界、允许的依赖方向、一个最小反例和一份可观察证据。
问题 2:最小情境推演。 怎样验证“最小订单切片”没有靠最终功能碰巧通过?
问题 3:替代方案与恢复。 注入“把所有模式堆进最终架构图,用术语数量代替边界清晰度和运行证据”后,怎样比较修复与更简单方案?
本页小结
- 架构与领域设计总复习的核心判断是:从一个关键业务规则向外展开模型与技术边界,先构造最小可行结构,再让真实压力决定是否增加扩展模式。
- 正常路径以“先使用用例、领域模型与存储端口,不引入 CQRS 或事件溯源”验收,不能只检查接口返回成功。
- 边界路径以“分别引入投影、事件事实源和仓储适配器,并为每项保存独立验收证据”验收,并保存依赖图、上下文地图、聚合测试、端口合同、读模型延迟、事件重放与模式删除清单。
- 如果“把所有模式堆进最终架构图,用术语数量代替边界清晰度和运行证据”仍可静默通过,说明边界只是图示,没有成为可执行约束。