Skip to content

Эксперт: прикладной 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