Добрый день!
Пытаюсь в очередной раз разобраться как же лучше спроектировать сущности, которые с одной стороны имеют общий функционал и данные, а с другой в зависимости от типа сущности могут иметь дополнительные данные и функционал.
Абстрактный пример. Есть проекты с полями:
- id
- название
- дата начала
- дата завершения
- статус
- тип проекта
...и несколько типов проектов:
проекты по доставке оборудования:
- логист
- маршрут доставки
- стоимость доставки
проекты по написанию технической документации:
- авторы
- куратор
- описываемый объект
То есть у каждого типа есть специфические поля/сущности/функционал.
Наследовать сущности мне кажется не очень хорошим решением, что-то вроде:
abstract class Project;
final class DeliveryProject extends Project;
final class DocumentationProject extends Project;
Придумал вот такой вариант: в домене есть сущность "Проект" (общие поля) и есть отдельные сущности под каждый тип проекта (только специфический поля типа проекта, но в качестве ID используется ID проекта). Создание проекта происходит всегда через доменный сервис, который одновременно создаёт две сущности.
Минус тут в том, что нарушается правило изменения только одного агрегата.
Наверняка есть лучше вариант проектирования таких вещей... подскажите, куда смотреть, что почитать?