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

199

Может кто-нибудь объяснить (в сжатой форме), что именно является доменным дизайном? Я довольно часто вижу этот термин, но на самом деле не понимаю, что это такое или как оно выглядит. Чем он отличается от не доменного дизайна?

Кроме того, кто-нибудь может объяснить, что такое доменный объект? Чем домен отличается от обычных объектов?

калянус
источник
6
Возможный дубликат Что такое дизайн, управляемый доменом?
Нильс ван дер Рест
Отвечает ли это на ваш вопрос? Что такое доменно-управляемый дизайн (DDD)?
Сатпал

Ответы:

112

РЕДАКТИРОВАТЬ:

Поскольку это, похоже, лучший результат для Google, а мой ответ ниже - нет, обратитесь к этому гораздо лучшему ответу:

https://stackoverflow.com/a/1222488/1240557

СТАРЫЙ ОТВЕТ (не очень полный :))

Чтобы создать хорошее программное обеспечение, вы должны знать, что это за программное обеспечение. Вы не можете создать банковскую систему программного обеспечения, если у вас нет хорошего понимания того, что такое банковское дело, нужно понимать сферу банковского дела.

От: Домен, управляемый Эриком Эвансом.

Эта книга довольно хорошо описывает описание DDD.

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

Микаэль Остберг
источник
Эта мини-версия является отличным справочником, и я считаю ее полезной даже с копией полного текста под рукой. Я обычно иду к нему, а затем текст для более подробной информации.
Кири Сарантакос
15
Итак, я беру из этого ответа «прочитайте эту книгу», что невозможно обобщить DDD просто в нескольких параграфах? Как философия дизайна может быть такой сложной?
Робин Уинслоу
Я бы не сказал, что это невозможно, но я думал, что есть лучшие места, чтобы прочитать об этом, и книга Эрика Эванса - лучший источник для этого, так зачем же дублировать это здесь?
Микаэль Остберг
7
Уважаемый читатель: если вы, как и я, пришли сюда из топового результата Google и были разочарованы тем, что нашли принятый ответ, так что внушающие оптимизм (извинения, Микаэль) не боятся, здесь есть более удовлетворительные объяснения на SO: stackoverflow.com/a/1222488 / 1240557
Kryger
3
Там я обновил свой ответ ссылкой. Это был намного лучший ответ. Спасибо!
Микаэль Остберг
42

Проектирование на основе доменов - это методология и методическое задание для разработки сложных систем, цель которых - сопоставить действия, задачи, события и данные в проблемной области с технологическими артефактами в области решения.

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

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

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

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

Управляемый доменом дизайн: «Добро и вызов» дает краткий обзор этого комментария:

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

Также ознакомьтесь с этой статьей « Управляемый доменом дизайн для сервисной архитектуры», в котором приведен краткий пример. В статье приведено следующее описание миниатюрного доменного дизайна.

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

Мартин Фаулер написал несколько статей, в которых в качестве методологии упоминается доменно-управляемый дизайн. Например, эта статья, BoundedContext , предоставляет обзор концепции ограниченного контекста из разработки, управляемой доменом.

В те молодые годы нам посоветовали построить единую модель всего бизнеса, но DDD признает, что мы узнали, что «полное объединение модели предметной области для большой системы не будет возможным или экономически эффективным» 1 . Таким образом, вместо этого DDD разделяет большую систему на ограниченные контексты, каждый из которых может иметь унифицированную модель - по сути, способ структурирования MultipleCanonicalModels.

Ричард Чемберс
источник
20

Вы МОЖЕТЕ ТОЛЬКО понять проект, управляемый доменом, сначала поняв, что является следующим:

Что такое домен?

Поле, для которого построена система. Управление аэропортом, продажа страховки, кафе, орбитальный полет, вы называете это.

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

Что такое модель?

«Полезное приближение к рассматриваемой проблеме». - Джерри Суссман

Класс Employee не является реальным сотрудником. Он моделирует настоящего сотрудника. Мы знаем, что модель не отражает все о реальных сотрудниках, и это не главное. Он предназначен только для того, чтобы охватить то, что нас интересует в текущем контексте.

Разные домены могут интересоваться разными способами для моделирования одной и той же вещи. Например, отдел оплаты труда и отдел кадров могут моделировать сотрудников по-разному.

Что такое модель предметной области?

Модель для домена.

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

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

Отобранный отсюда

Эдвин Икечукву Оконкво
источник
12

Вот еще одна хорошая статья, которую вы можете почитать о домене, управляемом дизайном . если ваше заявление является чем-то серьезным, чем назначение колледжа. Основная предпосылка - структурировать все вокруг ваших сущностей и иметь сильную модель предметной области. Различайте сервисы, которые предоставляют связанные с инфраструктурой вещи (такие как отправка электронной почты, сохраняющиеся данные) и сервисы, которые действительно выполняют ваши основные бизнес-требования.

Надеюсь, это поможет.

Nilesh
источник
4

Как и в TDD & BDD, вы / команда больше внимания уделяете тестированию и поведению системы, чем реализации кода.

Аналогичным образом, когда системный аналитик, владелец продукта, команда разработчиков и, разумеется, код - сущности / классы, переменные, функции, процессы пользовательских интерфейсов взаимодействуют с использованием одного и того же языка, который называется доменно-управляемым дизайном

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

Есть много подходов к модели системной с использованием DDD

  • источник событий (используя события как единый источник правды)
  • реляционные базы данных
  • графовые базы данных
  • используя функциональные языки

Доменный объект:

В очень наивных словах, объект, который

  • имеет имя на основе бизнес-процесса / потока
  • имеет полный контроль над своим внутренним состоянием, то есть предоставляет методы для манипулирования состоянием.
  • всегда выполнять все бизнес-инварианты / бизнес-правила в контексте их использования.
  • следует принципу единой ответственности
Нитин бабария
источник
TDD - разработка через тестирование
Nitin babariya
BDD - Развитие, управляемое поведением
Nitin babariya
DDD - Разработка, управляемая доменом
Nitin babariya
DDD -> Дизайн, управляемый доменом ~ Разработка ~
psaxton
4

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

  • В больших проектах со сложными требованиями это бесполезно, хотя это отличный способ дизайна для небольших проектов.

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

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

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

sajadre
источник
1

Я считаю, что следующий PDF даст вам большую картину. Дизайн, управляемый доменом, Эрик Эванс

ПРИМЕЧАНИЕ: подумайте о проекте, над которым вы можете работать, примените мелочи, которые вы поняли, и ознакомьтесь с лучшими практиками. Это также поможет вам развить ваши способности к проектированию архитектуры микросервисов.

Hedego
источник
0

Я не хочу повторять чужие ответы, поэтому вкратце объясняю некоторые распространенные недоразумения

  • Практический ресурс: УЗОРЫ, ПРИНЦИПЫ И ПРАКТИКА ДОМЕННО-ДРАЙВИНГОВОГО ДИЗАЙНА. Автор Scott Millett
  • Это методология для сложных бизнес-систем. Отнимает все технические вопросы при общении с бизнес-экспертами
  • Он обеспечивает глубокое понимание (упрощенной и изощренной модели) бизнеса всей командой разработчиков.
  • он синхронизирует бизнес-модель с моделью кода, используя вездесущий язык (язык, понятный всей команде разработчиков, бизнес-экспертами, бизнес-аналитиками, ...), который используется для общения внутри команды разработчиков или разработчиков с другими командами.
  • Это не имеет ничего общего с управлением проектами . Хотя его можно отлично использовать в таких методах управления проектами, как Agile.
  • Вы должны избегать использования всего этого в вашем проекте

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

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

  • Это не объектно-ориентированное программирование. Это в основном подход к решению проблем, и ( иногда ) вам не нужно использовать ОО-шаблоны (такие как «Банда четырех») в ваших моделях доменов. Просто потому, что это не может быть понято бизнес-экспертами (они мало знают о Factory, Decorator, ...). В DDD есть даже некоторые шаблоны (такие как «Сценарий транзакции», «Модуль таблицы»), которые не на 100% соответствуют концепциям ОО.

Али Абдоли
источник