# Ddd Domain Interactions

> 设计构造块间的协作机制：领域事件、领域服务、仓储接口与工厂。

- Skill: `forceinjection/ddd-domain-interactions` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add forceinjection/ddd-domain-interactions`
- Raw SKILL.md: https://api.skillmd.com/api/skills/forceinjection/ddd-domain-interactions/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ForceInjection (https://skillmd.com/u/forceinjection)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/forceinjection/ddd-domain-interactions

---


# DDD Domain Interactions

> 🌐 English version: [English](SKILL.en.md)

## 使用时机

- 聚合边界已设计完毕，需要定义聚合之间、聚合与外部之间的协作机制。
- 需要回答"聚合如何通信、谁编排跨聚合流程、持久化契约是什么"。
- 作为战术建模的最后一步，补全所有"连接组织"。

## 输入要求

- **必需**：聚合目录与不变量表（来自 `ddd-aggregates`）、事件候选清单（来自 `ddd-discover`）。
- **可选**：上下文映射与契约信息（来自 `ddd-context-map`）、上下文目录与词汇表（来自 `ddd-contexts`，用于区分领域事件与集成事件的边界）。

## 流程

1. **事件规范化**：统一事件命名规则（过去时、业务可读、无技术词）；为每个事件定义触发条件、源聚合、关键字段、排序要求。
2. **区分范围**：区分领域事件（上下文内）与集成事件（跨上下文/对外发布）。
3. **可靠性策略**：为每个事件定义幂等键、重放策略、去重窗口、死信处理。
4. **领域服务**：识别不属于任何单一聚合但承载领域逻辑的操作，定义为领域服务——明确输入、输出、使用的聚合与事件。
5. **仓储接口**：为每个聚合定义仓储的语义接口（加载、持久化、查询）——仅定义契约，不涉及实现。
6. **工厂**：识别复杂的聚合创建逻辑，定义工厂方法——明确创建条件、验证规则与初始状态。
7. **订阅者与副作用**：明确每个事件的消费者、触发的动作、补偿策略、监控指标。

## 输出

| 工件           | 结构要求                                                             |
| :------------- | :------------------------------------------------------------------- |
| 领域事件目录   | 表格：事件名、源聚合、触发条件、关键字段、范围（Domain/Integration） |
| 集成事件契约   | 表格：事件名、发布者、消费者、契约 Owner、版本策略、兼容窗口         |
| 幂等与重放策略 | 表格：事件、幂等键、去重窗口、重放规则、异常处理                     |
| 领域服务定义   | 表格：服务名、职责、输入、输出、依赖的聚合/事件、不应包含的逻辑      |
| 仓储接口清单   | 表格：聚合、方法签名（语义）、语义说明、查询边界                     |
| 工厂清单       | 表格：工厂名/方法、创建目标、创建条件、验证规则、初始状态            |
| 订阅者与副作用 | 表格：事件、订阅者、触发动作、补偿策略、监控指标                     |

## 校验清单

- [ ] 所有事件命名使用过去时，无技术词污染
- [ ] 跨上下文发布的事件有版本策略与兼容窗口
- [ ] 关键事件提供幂等键与重放策略
- [ ] 领域服务不包含本应属于聚合的业务逻辑（避免贫血模型）
- [ ] 仓储接口仅定义语义契约，不包含实现细节（SQL、ORM）
- [ ] 每个复杂创建逻辑都有对应工厂（不在应用层裸 new）

## 回溯触发

- 事件需携带另一聚合的私有数据（无法设计干净的 event schema） → 回溯至 `ddd-aggregates`（聚合边界需调整以保证事件自包含）。

## 示例

```text
@ddd-domain-interactions
基于以下聚合设计，帮我设计领域交互层：
- 聚合：Booking（根：Booking，VO：TimeSlot, BookingStatus）
- 聚合：RoomSchedule（根：RoomSchedule，VO：TimeSlotOccupancy）
- 事件候选：BookingConfirmed, BookingCancelled, CheckInRecorded
请输出领域事件目录、领域服务、仓储接口与订阅者清单。
```

