Domain-Driven Design (DDD) - это подход к разработке сложных программных систем, который фокусируется на предметной области (домене) и её логике. Основная идея DDD - создание программного обеспечения, которое точно отражает бизнес-процессы и правила предметной области.
DDD однозначно сегодня на хайпе. Много пишут на эту тему, и со многим я не совсем согласен. Во-первых, это не только для больших компаний. И это точно работает с любыми ЯП. И с монолитами, и микросервисами. И это не так сложно как может показаться на первый взгляд.
Решил выдать свою версию. Постараюсь по возможности как можно проще и подробнее всё выложить здесь к лету. А ниже список тем, которые затрону.
- Фокус на предметной области (Domain).
- Универсальный язык (Ubiquitous Language).
- Модель предметной области (Domain Model).
- Ограниченные контексты (Bounded Contexts).
- Стратегическое проектирование (Strategic Design): Использование таких концепций, как ядро (
Core Domain
), поддерживающие поддомены (Supporting Subdomains
) и общие поддомены (Generic Subdomains
). - Тактическое проектирование (Tactical Design): Применение шаблонов проектирования, таких как сущности (
Entities
), объекты-значения (Value Objects
), агрегаты (Aggregates
), репозитории (Repositories
) и сервисы домена (Domain Services
). - Итеративный процесс (Iterative Development).
- Фокус на сложности ядра (Core Domain).