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


277

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

Ответы:


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 только по этому ответу. В книге Эрика Эванса есть много идей. Например, ограниченные контексты. Парадигма ограниченного контекста является одним из столпов микросервисов, которые мы создаем сегодня. Чтение книги также поможет вам понять микросервисы.
Керем Байдоган
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.