Как изобразить ограниченный контекст? - PullRequest
13 голосов
/ 02 января 2011

Я имею в виду - физически, в коде. Организация именования, пространств имен, папок, сборок, базы данных / с.

Как должны взаимодействовать ограниченные контексты?

Например, не стесняйтесь использовать классический бизнес-домен электронной коммерции .

Ответы [ 2 ]

12 голосов
/ 03 января 2011

Я бы сказал «это зависит»

В некоторых случаях может быть достаточно отобразить ваши объекты BC в одну и ту же базу данных, а иногда у вас могут быть разные базы данных для ваших BC.

IMOЭлектронная коммерция может быть скорее BC, чем полноценным доменом.

Я провел слишком много времени в одном торговом агенте, где продавали продукты питания.

Итак, доменбыли «целые продажи», и ограниченным контекстом были: инвентарь, покупка, продажа, выставление счетов, каталог продукции и электронная коммерция (возможно, я здесь использую неправильную английскую формулировку)

Каждый из этих БК знал о «продуктах»но у всех их было другое представление о продукте.

например, Покупка может иметь сущность продукта с информацией о продавце, ценой покупки и т. д., прикрепленной к ней.

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

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

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

Лично я делаю это как отдельные сборки, у меня была бы модель электронной коммерции и модель продаж.

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

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

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

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

6 голосов
/ 05 января 2011

Я, конечно, согласен, что все зависит, но есть некоторые рекомендации, которые можно / нужно соблюдать. Цель ограниченного контекста, ну, в общем, границы. Границы, которые отделяют одну часть приложения от другой путем введения четко определенного контракта (интерфейса).

Я склонен относиться к BC как к сервисам в SOA. Для меня это означает, что в идеале это физически отдельные приложения (процессы ОС / сайты IIS). Двоичные файлы также отделены, конечно. Вся связь между BC в идеале асинхронна. В реальном мире это вряд ли возможно, но, по крайней мере, я не разрешаю транзакции с пересечением до н.э., поскольку они являются чистым злом.

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

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