| name | ddd-domain-interactions |
| description | 设计构造块间的协作机制:领域事件、领域服务、仓储接口与工厂。 |
| risk | safe |
| source | self |
| tags | [ddd, tactical, events, services, repositories] |
| date_added | 2026-05-08 |
DDD Domain Interactions
🌐 English version: English
使用时机
- 聚合边界已设计完毕,需要定义聚合之间、聚合与外部之间的协作机制。
- 需要回答"聚合如何通信、谁编排跨聚合流程、持久化契约是什么"。
- 作为战术建模的最后一步,补全所有"连接组织"。
输入要求
- 必需:聚合目录与不变量表(来自
ddd-aggregates)、事件候选清单(来自 ddd-discover)。
- 可选:上下文映射与契约信息(来自
ddd-context-map)、上下文目录与词汇表(来自 ddd-contexts,用于区分领域事件与集成事件的边界)。
流程
- 事件规范化:统一事件命名规则(过去时、业务可读、无技术词);为每个事件定义触发条件、源聚合、关键字段、排序要求。
- 区分范围:区分领域事件(上下文内)与集成事件(跨上下文/对外发布)。
- 可靠性策略:为每个事件定义幂等键、重放策略、去重窗口、死信处理。
- 领域服务:识别不属于任何单一聚合但承载领域逻辑的操作,定义为领域服务——明确输入、输出、使用的聚合与事件。
- 仓储接口:为每个聚合定义仓储的语义接口(加载、持久化、查询)——仅定义契约,不涉及实现。
- 工厂:识别复杂的聚合创建逻辑,定义工厂方法——明确创建条件、验证规则与初始状态。
- 订阅者与副作用:明确每个事件的消费者、触发的动作、补偿策略、监控指标。
输出
| 工件 | 结构要求 |
|---|
| 领域事件目录 | 表格:事件名、源聚合、触发条件、关键字段、范围(Domain/Integration) |
| 集成事件契约 | 表格:事件名、发布者、消费者、契约 Owner、版本策略、兼容窗口 |
| 幂等与重放策略 | 表格:事件、幂等键、去重窗口、重放规则、异常处理 |
| 领域服务定义 | 表格:服务名、职责、输入、输出、依赖的聚合/事件、不应包含的逻辑 |
| 仓储接口清单 | 表格:聚合、方法签名(语义)、语义说明、查询边界 |
| 工厂清单 | 表格:工厂名/方法、创建目标、创建条件、验证规则、初始状态 |
| 订阅者与副作用 | 表格:事件、订阅者、触发动作、补偿策略、监控指标 |
校验清单
回溯触发
- 事件需携带另一聚合的私有数据(无法设计干净的 event schema) → 回溯至
ddd-aggregates(聚合边界需调整以保证事件自包含)。
示例
@ddd-domain-interactions
基于以下聚合设计,帮我设计领域交互层:
- 聚合:Booking(根:Booking,VO:TimeSlot, BookingStatus)
- 聚合:RoomSchedule(根:RoomSchedule,VO:TimeSlotOccupancy)
- 事件候选:BookingConfirmed, BookingCancelled, CheckInRecorded
请输出领域事件目录、领域服务、仓储接口与订阅者清单。