Я только начинаю изучать дизайн, управляемый доменом, и столкнулся с небольшим количеством дорожного блока.Как смоделировать ValueObject, который может принадлежать нескольким агрегатам
У меня есть много разных отношений, которые я пытаюсь создать в DDD-способе. Скажем, у меня есть виджет, который является моей совокупностью. Виджет может иметь список параметров, которые представляют собой объекты значений, описывающие виджетов.
Я думаю, что репо должно запросить список объектов значений, связанных с виджетами, и заполнить свойство «Параметры» виджета вместо создания отношения многих ко многим в EF.
My Domain Object выглядеть следующим образом:
public class Widget{
public int Id{get;set;}
public string Name{get;set;}
public List<Option> Options{get;set;}
public int DefaultOptionId{get;set;}
}
/* Value Object aka Look Up*/
public class Option{
public int Id{get;set;}
public string Name{get;private set;}
}
Структура БД и данные:
Widget Table Data
ID: 1 , Name: Widget 1, DefaultOptionId: 2
ID: 2 , Name: Widget 2, DefaultOptionId: 3
Option Table
ID: 1 , Name: Option Name 1
ID: 2 , Name: Option Name 2
ID: 3 , Name: Option Name 3
ID: 4 , Name: Option Name 4
Relationship Table
WidgetId: 1 , OptionId: 2
WidgetId: 1 , OptionId: 3
WidgetId: 2 , OptionId: 2
WidgetId: 2 , OptionId: 3
WidgetId: 2 , OptionId: 4
Что должно произойти, когда параметр будет удален? Переименован? – guillaume31
Это будет мой следующий вопрос :) Как люди обычно справляются с такой ситуацией? Список параметров может быть изменен с помощью области администрирования, но если параметр связан с виджетами, я не считаю, что пользователь должен иметь возможность, потому что тогда все виджеты, которые имеют этот параметр, будут меняться. Это кажется чрезмерно сложным, но должно быть общей задачей дизайна. – GregL
Вам нужно решить, в * вашем * домене;) Случай с переименованием расскажет вам много, потому что он показывает, что параметр виджета заморожен в момент его добавления (возможно, больше значения Value-like), или если «master» Option может развиваться и всегда должен оставаться синхронизированным повсюду (скорее, Entity) – guillaume31