Может ли кто-нибудь объяснить домен Driven Design (DDD) на простом английском языке?

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

Ответ 1

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

Предполагая, что вы все еще читаете в этот момент, я беру DDD:

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

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

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

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

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

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

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

Ответ 2

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

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