Списки ценностных объектов в распределенном доменно-ориентированном проектировании

Мне нужно конкретное руководство по реализации списка объектов значений в моем распределенном приложении DDD. Вот что у меня есть:

Мое приложение основано на приложении службы RESTful, работающем на сервере, предоставляющем услуги нескольким клиентским приложениям. Одна из моих сущностей, «Клиент», имеет свойство «Регион», которое содержит ссылку на один из многих типов значений «Регион». Список регионов хранится во внутренней базе данных, но мы НЕ предоставляем интерфейс для ведения этого списка. Любые изменения будут внесены непосредственно в базу данных (поскольку это будет происходить нечасто) и, скорее всего, будут связаны с изменением имени, а не с добавлением / удалением. В некоторых случаях, например, при выходе на новый рынок, может быть добавлен новый товар, поэтому список должен быть «динамическим».

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

Я могу обрабатывать его со стороны пользовательского интерфейса, но не знаю, как следует получать и поддерживать список регионов на моем уровне домена. Есть ли у меня отдельный RegionRepository или список должен быть получен из CustomerRespository? Что, если бы Клиент был единственной сущностью, которая ссылалась на объект значения? Если несколько организаций ссылаются на ВО, изменит ли это подход?

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

Хотя элементы списка «привязаны к ключу», они не соответствуют определению сущности с их собственными идентификаторами и не существуют, кроме как в контексте объекта родительского домена (в данном случае, «Заказчик»). Итак, я предполагаю, что это объекты-значения, и это нормально. Но, опять же, мне неясно, как я должен структурировать свое приложение, чтобы клиенты могли получать список ВО для сценария, подобного тому, что я описал выше.


person SonOfPirate    schedule 16.05.2011    source источник


Ответы (2)


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

В качестве примера я использую следующее:

interface IAddress
{
    List<State> GetStatesByCountry (string country);
}

и у меня также есть

interface ITaxes
{
    List<State> GetStates ();
}

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

person Todd Smith    schedule 16.05.2011
comment
Я считаю, что когда вы представляете коллекцию как свойство объекта, есть предположение, что результаты каким-то образом находятся в контексте родительского объекта. Учитывая это, я бы предположил, что ITaxes.GetStates () вернет список штатов, в которых применяется этот налог, и не обязательно список всех 50 штатов. Вы не согласны? - person SonOfPirate; 17.05.2011

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

person SonOfPirate    schedule 17.11.2011