Эксперт: прикладной DDD¶
Мини-конспект для раскладывания домена и границ сервисов.
Термины¶
- Ubiquitous Language — общий язык домена, фиксируем в глоссарии.
- Bounded Context — область, где термины однозначны.
- Domain Events — факты в домене, на которые реагируют другие контексты.
- Aggregates — единицы согласованности внутри контекста.
Как выделять контексты¶
- Сильная внутренная связность + слабая связь наружу.
- Разные владельцы/процессы/SLA → разные контексты.
- Противоречивые смыслы терминов → разделяем.
Шаблон контекста¶
- Цель и ответственность.
- Модель данных (упрощённая).
- Команды/запросы (API) и события (outgoing).
- Инварианты (что всегда истинно).
- Нефункциональные требования (SLA, аудит, безопасность).
Взаимодействие контекстов¶
- Sync API: локальные транзакции, идемпотентность на входе.
- Async Events: уведомления/триггеры, eventual consistency.
- Соглашение о версиях и контрактах (версионируйте события/API).
Антикоррупционные слои¶
- Внешний сервис с другой терминологией — адаптер/translator.
- Избегайте протаскивания чужих моделей внутрь контекста.
Когда DDD не нужен глубоко¶
- Маленькие команды/продукты, нет сложного домена.
- Монолит без перспективы дробления — держите модули, но не усложняйте.
Практический чек-лист¶
- [ ] У контекстов есть чёткие границы и владельцы.
- [ ] Названия сущностей согласованы в глоссарии.
- [ ] События и команды описаны с полями и источниками.
- [ ] Инварианты и ограничения перечислены.
- [ ] Есть стратегия версионирования API/событий.
Last update:
November 18, 2025