Что такое доменно-управляемый дизайн (DDD)? [закрыто]

277

Я продолжаю видеть, что DDD (Domain Driven Design) часто используется в статьях - я прочитал статью в Википедии о DDD, но до сих пор не могу понять, что это такое на самом деле и как я буду реализовывать это при создании своих сайтов?

leen3o
источник

Ответы:

596

Во-первых, если вы не знаете, что вам это нужно, возможно, вам это не нужно. Если вы не распознаете проблемы, которые решает DDD, возможно, у вас нет этих проблем. Даже защитники DDD часто отмечают, что DDD предназначен только для крупных (> 6 месяцев) проектов.

Предполагая, что вы все еще читаете в данный момент, мой взгляд на DDD таков:

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

Между вами и экспертом в области вы создаете вездесущий язык (UL), который представляет собой концептуальное описание системы. Идея заключается в том, что вы должны быть в состоянии записать, что делает система, так, чтобы эксперт по доменам мог прочитать ее и убедиться, что она правильная. В нашем примере со ставками распространенный язык будет включать в себя определение таких слов, как «раса», «ставка», «шансы» и так далее.

Концепции, описанные в UL, станут основой вашего объектно-ориентированного дизайна. DDD дает некоторые четкие указания о том, как ваши объекты должны взаимодействовать, и помогает вам разделить ваши объекты на следующие категории:

  • Объекты-значения, представляющие значение, которое может иметь подразделы (например, дата может иметь день, месяц и год)
  • Сущности, которые являются объектами с идентичностью . Например, каждый объект Customer имеет свою собственную идентификацию, поэтому мы знаем, что два клиента с одинаковыми именами не являются одинаковыми клиентами
  • Совокупные корни - это объекты, которые владеют другими объектами. Это сложная концепция, и она основана на том, что есть некоторые объекты, которые не имеют смысла, если у них нет владельца. Например, объект «Строка заказа» не имеет смысла без принадлежащего ему «Порядка», поэтому мы говорим, что «Порядок» является совокупным корнем, а объектами «Строка заказа» можно манипулировать только с помощью методов в объекте «Порядок».

DDD также рекомендует несколько шаблонов:

  • Репозиторий , шаблон для сохранения (сохранение и загрузка ваших данных, обычно в / из базы данных)
  • Фабрика , шаблон для создания объектов
  • Сервис, шаблон для создания объектов, которые управляют объектами вашего основного домена, не являясь частью домена.

Теперь я должен сказать, что если вы раньше не слышали ни об одном из этих вещей, вам не следует пытаться использовать DDD в любом проекте, для которого у вас есть крайний срок. Перед тем , как DDD, вы должны быть знакомы с шаблонами проектирования и шаблонами проектирования предприятия . Знание этого делает DDD намного легче понять. И, как упомянуто выше, есть бесплатное введение в DDD, доступное от InfoQ (где вы также можете найти доклады о DDD).

Роб Найт
источник
33
Вау ... Какой отличный ответ! Очень ценное и лучшее объяснение, которое я прочитал где-то за милю. Спасибо .. Я скачаю эту книгу завтра.
leen3o
3
«Совокупные корни - это объекты, которые владеют другими объектами. Это сложная концепция, и она основана на том, что есть некоторые объекты, которые не имеют смысла, если у них нет владельца». Я думаю, что здесь может быть неправильное представление, идея, которую вы упомянули «Целое значение», в то время как Aggregate больше заботится о границе транзакции, где здесь необходимо применять все бизнес-инвариантные правила.
super1ha1
6
Честно говоря, это звучит почти как каждый проект, в котором разработчики сотрудничают с архитекторами более месяца. (Ну, по моему опыту, по крайней мере.) От осознания этого я еще больше оцениваю ваш ответ. :)
Ярослав
4
Я не согласен с утверждением, что DDD «предназначен только для крупных проектов». DDD - это не то, что вы должны делать полностью или не делать вообще. Вы можете просто сделать некоторые практики из DDD. Например, вы можете просто использовать «Объекты значения» и «Вездесущий язык», а не создавать общие корни в небольшом проекте.
EasterBunnyBugSmasher
6
Кстати, разве мы не проводим анализ предметной области для каждого проекта, который мы делаем или моделируем. Разве у нас уже никогда не заканчивались разговоры как BA с клиентами и МСП, чтобы понять сферу и сферу проекта? Я до сих пор не понимаю, что необычайно выдающееся в DDD, чем в любом другом проекте разработки программного обеспечения?
сверхновая
51

Возьмите StackOverflow в качестве примера. Вместо того, чтобы начинать проектировать некоторые веб-формы, вы сначала концентрируетесь на объектно-ориентированном моделировании объектов в вашей проблемной области, например, пользователей, вопросов, ответов, голосов, комментариев и т. Д. Так как дизайн определяется деталями проблемы Домен это называется доменным дизайном .

Вы можете прочитать больше в книге Эрика Эванса .

Мэтт Хауэллс
источник
5
Короткая версия книги Эрика Эванса доступна бесплатно .
troelskn
Проблема в том, что вам нужен кто-то, кто достаточно хорошо понимает домен, чтобы он мог сказать что-то полезное, прежде чем связать его с помощью веб-страниц! Когда это так !
Ян Рингроз
3
Но кто будет начинать с разработки формы, если честно? Любой респектабельный академический курс будет проходить анализ, проектирование и моделирование приложений в соответствии с требованиями бизнеса. Я просто не понимаю, что нового в этой технике.
Себас
6
Я тоже, это просто объектно-ориентированный дизайн, используемый всеми еще до того, как появилась эта концепция. Я не вижу здесь никакого нового изобретения.
Ронен Фестингер
2
@RonenFestinger, пожалуйста, не судите DDD только по этому ответу. В книге Эрика Эванса есть много идей. Например, ограниченные контексты. Парадигма ограниченного контекста является одним из столпов микросервисов, которые мы создаем сегодня. Чтение книги также поможет вам понять микросервисы.
Керем Байдоган