Термин · Глоссарий B2B-ПО

Domain-Driven Design (Domain-Driven Design)

Domain-Driven Design (DDD) – подход к проектированию ПО, при котором программная модель строится вокруг бизнес-домена. Введён Эриком Эвансом в 2003 году. Ключевые концепции: Bounded Context, Ubiquitous Language, Aggregate, Domain Event.

Буква «D» В категориях: 4 Платформ: 6+

Введение

Domain-Driven Design (DDD) – методология проектирования программного обеспечения, в которой структура и язык кода (имена классов, методов, переменных) должны соответствовать бизнес-домену. Подход введён Эриком Эвансом в книге «Domain-Driven Design: Tackling Complexity in the Heart of Software» (2003).

DDD предполагает тесное взаимодействие разработчиков с экспертами предметной области (domain experts) для создания единой модели, понятной обеим сторонам. Это не только технический, но и коммуникационный подход.

История и контекст

До DDD разработчики создавали технические модели, оторванные от бизнеса: «таблица Users», «класс DataProcessor». Эрик Эванс в «синей книге» (Blue Book) систематизировал практики создания моделей, отражающих реальный бизнес. Позднее Вон Вернон в «красной книге» (Implementing Domain-Driven Design, 2013) предложил конкретные паттерны реализации. DDD получил второе рождение с расцветом микросервисов: Bounded Context стал главным инструментом определения границ сервисов.

Как это работает

Стратегическое DDD – работа с большой картиной:

  • Ubiquitous Language – единый язык, используемый командой и в коде, и в переговорах с бизнесом;
  • Bounded Context – явная граница, внутри которой модель и язык имеют чёткий смысл. Разные контексты – разные модели одного понятия;
  • Context Map – карта взаимодействий между Bounded Context'ами.

Тактическое DDD – паттерны реализации:

  • Entity – объект с идентификатором (Order, User);
  • Value Object – неизменяемый объект без идентификатора (Money, Address);
  • Aggregate – кластер объектов с единым корнем (Aggregate Root), защищающий инварианты;
  • Domain Event – факт, произошедший в домене (OrderPlaced);
  • Repository – интерфейс для доступа к агрегатам.

Где применяется

  • Сложные корпоративные системы с богатой бизнес-логикой (ERP, финтех, страхование);
  • Микросервисные архитектуры – Bounded Context как граница сервиса;
  • Event Sourcing системы – Domain Event как единица хранения;
  • Российские enterprise-разработки на 1С, Java, .NET с применением CQRS.

Преимущества и ограничения

Преимущества: код отражает бизнес-реальность, улучшается коммуникация команды; чёткие границы снижают coupling; Aggregate защищает инварианты. Хорошо масштабируется при сложном домене.

Ограничения: высокий порог входа; требует значительных инвестиций во взаимодействие с бизнесом; избыточен для простых CRUD-систем; правильное определение Bounded Context и Aggregate – нетривиальная задача.

Связь с другими понятиями

DDD – основа для микросервисов: Bounded Context определяет границы сервиса. CQRS и Event Sourcing – тактические паттерны, органично вписывающиеся в DDD. Event-driven Architecture распространяет Domain Events за пределы Bounded Context. Монолит также может строиться по DDD-принципам – в виде модульного монолита с чёткими контекстами.

Понятия из глоссария Цифрового маркетплейса, которые часто встречаются вместе с термином «Domain-Driven Design».

Платформы класса «Domain-Driven Design»

Решения из каталога Цифрового маркетплейса, относящиеся к этому классу ПО. Карточки ведут на полные карточки платформ с тарифами, обзорами и кейсами внедрения.

Онколинк

Онколинк

Разработка ПО
Платформа для управления онкологическими пациентами и координации медицинского обслуживания. Входит в Единый р...
Цена по запросу
Подробнее →
MO

Moon

Разработка ПО
Moon - platforma avtomatizirovannogo testirovaniya veb-prilozheniy v nastol'nykh i mobil'nykh brauzerakh po pr...
Цена по запросу
★ 4.2
Подробнее →
Модуль обмена C3D Converter

Модуль обмена C3D Converter

Разработка ПО
Модуль обмена C3D Converter отвечает за чтение и запись 3D-моделей в файлах нейтральных форматов и в собственн...
Цена по запросу
Подробнее →
JaCarta АРМ УЦ

JaCarta АРМ УЦ

Разработка ПО
ПО JaCarta АРМ УЦ - приложение, позволяющее генерировать ключевые пары с использованием встроенных криптографи...
Цена по запросу
★ 4.7
Подробнее →
АВ

Автограмма

Разработка ПО
Автограмма — визуальная среда разработки встраиваемых систем управления (No-Code/IDE) для промышленной автомат...
Цена по запросу
Подробнее →

Категории каталога

Разделы каталога Цифрового маркетплейса, в которые входят решения, использующие «Domain-Driven Design».

Где применяется

Отрасли, в которых «Domain-Driven Design» используется на практике. Откройте отраслевой раздел Цифрового маркетплейса, чтобы увидеть подходящие решения, кейсы и новости.

Частые вопросы про Domain-Driven Design

Что такое Bounded Context в DDD?

Явная граница, внутри которой модель данных и язык имеют строго определённый смысл. Например, «Клиент» в контексте продаж и в контексте поддержки – разные объекты с разными атрибутами.

Зачем нужен Ubiquitous Language?

Единый язык устраняет разрыв между бизнесом и разработкой. Когда в коде и в переговорах используются одни термины, модель точнее отражает реальность и легче поддерживается.

Что такое Aggregate в DDD?

Кластер связанных объектов (Entity + Value Object), управляемый единым корнем (Aggregate Root). Все изменения проходят через корень, который обеспечивает консистентность инвариантов домена.

Как DDD помогает проектировать микросервисы?

Каждый Bounded Context становится кандидатом на отдельный микросервис. Это даёт технически обоснованные, а не произвольные границы сервисов, соответствующие бизнес-реальности.

Обязательно ли применять все паттерны DDD?

Нет. DDD – это набор инструментов, а не жёсткий фреймворк. Стратегические паттерны (Bounded Context, Ubiquitous Language) полезны всегда, тактические (Aggregate, Repository) – по ситуации.