@vanillathunder

Чем отличается контекст от домен в ddd?

\src
    \Order
        \Appication
        \Domain
        \Infrasturcture
    \Delivery
        \Appication
        \Domain
        \Infrasturcture


В рамках примера такой структуры кода, папка `Delivery` является доменом или контекстом? Не совсем понятно в рамках кода, что является доменом, а что контекст.
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
@ddd329
Приветствую!
Например, в реальном мире существует некий бизнес, который принимает заказы и соответственно занимается их доставкой. Так вот этот бизнес и является Предметной Областью, которая содержит в себе некую проблему, которую нужно решить. При решении проблем предметной области при помощи разработки программного продукта, в коде мы эту область моделируем и получается Модель Предметной Области, которая выражает способ решения проблемы. Получается в реальном мире есть Предметная Область (Domain), а в программном коде есть Модель Предметной Области (обычно тоже Domain).
Предметная область может быть очень большой или структура бизнеса состоит из нескольких отделов, и поэтому эту область могут разбивать на подобласти(sub-domain). Так вот эти самые подобласти в программном коде реализуются посредством Ограниченных Контекстов (Bounded Context), каждый из которых содержит свою маленькую Модель Предметной Области.

Теперь непосредственно к самому вопросу: "Чем отличается контекст от домен в ddd?" - если у вас предметная область не разделена на подобласти, то в реальном мире Предметная область (Domain), будет иметь отражение в программном коде в виде одной Модели Предметной Области (Domain), что равно одному Ограниченному Контексту (Bounded Context).
А если предметная область разделена на Подобласти Предметной Области, то в коде будет отражаться в виде нескольких Ограниченных Контекстов.

Судя по вашей структуре папок, могу сказать, что ваша предметная область состоит из двух подобластей: Заказ и Доставка, и в программном коде реализуются посредством двух Ограниченных Контекстов: Заказ (Order) и Доставка (Delivery), где каждый содержит свою маленькую Модель Предметной Области (Domain), которая размещена в у вас в папке domain.

Папки Order и Delivery можно было переименовать в OrderBoundexContext и DeliveryBoundexContext, тогда может быть и не возникла путаница.

В рамках примера такой структуры кода, папка `Delivery` является доменом или контекстом?
- является поддоменом/подобластью и одновременно ограниченным контекстом в коде, которая содержит свою модель. Аналогично и для Order.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@basili4-1982
там все просто, домен это какая то бизнесовая единица например доставка товара.
контекст это где некая модель существует.
Берем контекст товара вот он существует в корзине, в заказе, в списке на доставку, в списках на возврат и т.д.
Это его контекст. Его контекст может пронизывать несколько доменов. Это не очень хорошо в плане атомарности доменов. Поэтому делают товар в корзине, доставляемый товар и прочее. Потому что в разных доменнах требуется различные атрибуты этого объекта. Не котрые товарищи например дикоррируют сущность. Например чел добавил товар в корзину, берем товар на складе с атрибутами присущими только ему описанным неким интерфейсом оборачиваем его сущностью товар в корзине с описанным интерфейсом и юзаем его, далее он попадает в доставку и т.д. И в этом случае мы можем всегда достать из объекта его предка.
Ну иногда создают новый объект и переносят только те значения которые имеют смысл в текущем домене.
тут уже свои плюсы
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы