Моделирование двух параллельных агрегатов, сущностей, иерархий объектов-значений

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

С одной стороны, у меня есть иерархия Устройство-> Датчик-> Измерение, смоделированная как агрегат с устройством в качестве корня, датчиком в качестве объекта и измерением в качестве ВО. Все идет нормально.

Теперь у каждого устройства есть тип, как и у сенсора. В то же время измерения относятся к измеряемой переменной (например, температуре). Вот где вещи распадаются.

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

Затем я решил смоделировать их как совокупность, следуя структуре, аналогичной совокупности устройств: DeviceType->SensorType->Variable. Однако это не работает, так как датчики могут ссылаться на SensorType и Measurement на переменную, нарушая правило разрешения ссылок на корень агрегата только из другого агрегата. Кроме того, может случиться так, что несколько типов устройств включают в себя один и тот же тип датчика (например, датчик заряда аккумулятора), а также несколько датчиков измеряют одну и ту же переменную (например, уровень заряда аккумулятора).

Это приводит меня к тому, что каждый из этих объектов (DeviceType, SensorType, Variable) является независимым, каждый в своем собственном (вырожденном) .

Мой конкретный вопрос: правильно ли я интерпретировал понятия Агрегата, Сущности, ВО или наличия таких анемичных агрегатов, в основе которых лежит только анти-паттерн?


person pablochacin    schedule 30.07.2012    source источник
comment
Я думаю, было бы полезно, если бы вы разместили часть кода, который у вас есть.   -  person eulerfx    schedule 31.07.2012
comment
Кода пока нет. Я все еще моделирую домен. Я пытался отправить изображение, но система не позволила мне это сделать, так как я новый пользователь.   -  person pablochacin    schedule 31.07.2012
comment
pablochacin, вы когда-нибудь придумывали подходящий способ моделирования своего домена? у меня похожая ситуация...   -  person oakman    schedule 05.01.2015
comment
@oakman В итоге я создал две параллельные иерархии агрегатов и сделал ссылки между элементами одной и той же иерархии, что нарушает правило не ссылаться, а на корень агрегата. Однако я думаю, что ответ Касабланки правильный.   -  person pablochacin    schedule 09.01.2015


Ответы (1)


В моделировании нет жестких и быстрых правил, вы должны делать то, что лучше всего подходит для вашего варианта использования. При этом агрегаты в основном используются для поддержания инвариантов в группе сущностей. Я не вижу таких ограничений между DeviceType, SensorType и Variable, поэтому не вижу причин объединять их. Было бы неплохо сохранить их как независимые объекты (или даже объекты-значения).

person casablanca    schedule 31.07.2012
comment
Смысл отказа от моделирования DeviceType, SensorType и Varibale как объектов Value заключается в том, что они не являются простыми атрибутами датчика устройства и измерения (соответственно), как в типичном примере адреса. Они определяются один раз как часть конфигурации системы, а затем на них ссылаются другие сущности. Вот что меня озадачивает. Я полагаю, как вы указываете, что, возможно, их следует рассматривать как независимые сущности. - person pablochacin; 01.08.2012
comment
@pablochacin: В этом случае да, вы можете смоделировать их как сущности, но оставить их независимыми. Нет ничего плохого в наличии сущностей, не являющихся частью агрегатов. - person casablanca; 02.08.2012