Допустим, у меня есть типичная сущность Автомобиль
class Car : Entity
{
public double MaxSpeed { get; set; }
public Color Color { get; set; }
/* ... */
}
Эта сущность в моей модели предметной области будет корневой сущностью совокупности .
Теперь, скажем, я специализируюсь на автомобилях. Я создаю Ferrari , и счастливые владельцы Ferrari любят называть их по прозвищу:
class Ferrari : Car
{
public string Nickname { get; set; }
}
Допустим, у меня есть другая сущность, Компания . Это будет корневая сущность другого Совокупного . В компании работает много людей, представленных субъектом Лицо . У людей могут быть машины. Но Президент компании обычно очень богат, и у таких людей есть Ferrari:
class President : Person
{
public Ferrari Ferrari { get; set; }
}
В этой ситуации у меня есть Президент организации, который находится внутри Агрегата компании , который содержит ссылку на Ferrari, специализацию корневого объекта другого агрегата. .
Правильно ли это с точки зрения DDD? Можно / нужно ли рассматривать специализацию самих корневых сущностей как корневых сущностей одного и того же агрегата? Я имею в виду, в области, которую я описал, является ли сущность Ferrari также корневой сущностью Car Aggregate (поскольку Ferrari также является Car)?
Теперь допустим, что мне нужно сохранить эту модель в базе данных . Я думаю, что мой вопрос не зависит от структуры OR / M, которую я буду использовать.
Как мне построить стол , содержащий автомобили ? Должен ли я создать одну таблицу Cars с столбцом CarType (возможные значения: «Car», «Ferrari») и столбцом Nickname со значением NULL?
Или я должен построить стол для автомобилей и стол для Ferrari, последний из которых имеет свой ПК - ФК автомобилей?
Спасибо!