DDD, управляемый доменом — агрегация проектов

Дизайн, управляемый доменом

концепция

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

Что такое ДДД

Драйвер домена DDD — это не архитектура, а методология проектирования архитектуры.

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

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

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

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

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

Стратегический дизайн и тактический дизайн

Стратегический дизайн:В основном с точки зрения бизнеса, установить модель бизнес-домена и разделить границы домена.

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

Агрегация дизайна

实体和值对象

Наша электронная коммерцияСоздать заказВозьмите сценарий в качестве примера, просто проанализируйте бизнес и реализуйте различные концепции DDD:

  1. С помощью event storm по бизнес-поведению отсортировать все созданные заказыорганизацияиобъект значения, такие как: пользователи, продавцы, продукты, заказы, корзины и т. д.
  2. выяснитьСовокупный корень, чтобы определить, является ли сущность совокупным корнем, можно проанализировать, соответствует ли она следующим элементам:
    • независимый жизненный цикл
    • Глобально уникальный идентификатор
    • Может создавать и изменять другие объекты
    • Существует специальный модуль для управления этой сущностью.
  3. В соответствии с единой ответственностью бизнеса и принципом высокой связности найдите все сущности и объекты-значения, тесно связанные с корнем агрегации, и создайте коллекцию, содержащую корень агрегации (уникальный), несколько сущностей и объектов-значений, и эта коллекция агрегация. Здесь мы можем построить четыре заказа, пользователей, продавцов, товары и тележки для покупок.полимеризация.
  4. Анализируйте отношения между агрегатами и рисуйте ссылки на объекты и модели зависимостей. Чтобы создать заказ, вам нужна информация о получателе и адрес доставки.После создания заказа эти две части информации не будут обновляться, потому что пользователь обновляет данные позже, поэтому информация о пользователе и адрес доставки используются в качестве объектов-значений агрегация заказов. Точно так же информация о товарах одинакова: товары и торговцы независимы, но тесно связаны между собой, и оба они объединены в качестве объекта стоимости заказа. Заказ может содержать товары от нескольких продавцов.Товары нескольких продавцов принадлежат одному и тому же заказу, но заказы между разными продавцами на стороне продавца изолированы, поэтому есть два объекта: заказ продавца и заказ пользователя. Корзина напрямую не связана с созданием заказа. При успешном создании заказа срабатываетСобытия домена"Обновить корзину".

Приведенный выше анализ может быть необоснованным, просто как пример анализа домена DDD.

важные концепции

организация

Сущности в модели домена существуют в форме DO (Domain Objects), каждый объект сущности имеет уникальный идентификатор, который имеет бизнес-атрибуты и бизнес-поведение.

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

объект значения

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

полимеризация

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

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

Если бизнес требует, чтобы две сущности в одном и том же агрегате были реализованы вместе, мы можем использоватьДоменные службывыполнить.

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

Совокупный корень

Корень агрегата также является сущностью, которая является менеджером агрегата. Он содержит атрибуты и деловое поведение объекта.

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

Разница между сущностями, объектами-значениями и совокупными корнями

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

Объект имеет уникальный идентификатор внутри агрегата, его жизненный цикл управляется корнем агрегата, а данные являются переменными.

Объект значения не имеет уникального идентификатора, жизненный цикл управляется корнем агрегата, а данные доступны только для чтения.

Корень агрегата связан с корнем агрегата по идентификатору.

Совокупный корень и его внутренние сущности, прямые ссылки на объекты.

Совокупный корень и его внутренние объекты-значения, прямые ссылки на объекты.