TGViewer
Java Portal | Программирование Java Portal | Программирование @java_iibrary · 11.6K subscribers
Post #1716 2.38K
Что такое Domain-Driven Design

Domain-Driven Design, или DDD, это подход к разработке ПО, который помогает переводить сложные предметные области в выразительное, живое и эволюционирующее программное обеспечение. Он нужен, когда требования пользователей сложные.

Подход сформулировал Эрик Эванс, автор «Синей книги». Техническая ценность DDD в том, что он помогает писать выразительный, насыщенный и инкапсулированный код, который легко тестировать, масштабировать и сопровождать.

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

Сущности это доменные объекты, для которых важна идентичность. Примеры: User, Job, Vinyl, Post, Comment. Сравнение сущностей идет по уникальному идентификатору, обычно это UUID или первичный ключ.

Объекты-значения не имеют идентичности. Это атрибуты сущностей. Например, Name как объект-значение у User.

Агрегат это набор сущностей, объединенный корнем агрегата. Корень агрегата это то, к чему обращаются при поиске и через что проходят все операции. Внешний код не должен ссылаться на объекты внутри границ агрегата. Так сохраняется согласованность.

Модель предметной области в DDD опирается на смыслы терминов domain и model. Домен это детали задачи, которую вы решаете. Это знание о бизнесе, операциях, терминологии, правилах, целях и ограничениях. Понимание этого определяет саму проблему и рамки решения.

Доменные сервисы это место для доменной логики, которая не принадлежит ни одному конкретному объекту.

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

Репозиторий используется для получения доменных объектов из слоя хранения. С опорой на принцип подстановки Лисков и многослойную архитектуру можно спроектировать доступ так, чтобы, например, переключаться на in-memory репозиторий для тестов.

Фабрика нужна, потому что доменные объекты создаются разными способами. Объекты домена можно собирать фабрикой из сырых строк SQL, сырого JSON или из Active Record, который вернул ваш ORM инструмент вроде Sequelize или TypeORM.

👉 Java Portal
  • ❤ 9
  • 👍 5
  • 🔥 2
More from @java_iibrary
  1. Sep 30, 2026Docker прост, пока всё работает. Но что делать, если контейнер постоянно перезапускается,…
  2. Sep 29, 2026Эволюция языков программирования 1940-е → Машинный код ⬇️ 1950-е → Ассемблер ⬇️ 1960-е → F…
  3. Sep 29, 2026Большинство Java-разработчиков используют эти термины каждый день. Удивительно, но многие…
  4. Sep 28, 2026💡 Java: не создавайте ресурсоёмкие объекты, пока они действительно не понадобятся. ✅ Иниц…
  5. Sep 28, 2026Проблема в продакшене. Приложение зависло. Вы запускаете: jstack <pid> Через несколько сек…
  6. Sep 27, 2026Java-разработчики, CopyOnWriteArrayList создаёт копию всего внутреннего массива при каждом…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →