Разработка агрегатных корней DDD для отношения, имеющего внутренние типы

Допустим, у меня есть совокупный корень с именем User пользователь может иметь несколько Vehicle, Vehicle сущность имеет такие типы, как (suv, truck, sedan, так далее …).

В том случае, если я хочу получить User транспортные средства типа sedan только я должен спроектировать мой агрегат, чтобы получить sedans прямо из совокупности, как User->getSedans() ?

Или я могу получить это бросить UserRepository->getVehiclesOfTypeSedan() и агрегаты содержат только Vehicles ?

1

Решение

Чтобы держать ваш интерфейс и наследование под рукой, я думаю, что лучше отделить вашу логику:

UserRepository->getVehicles("sedan");

Или вы можете использовать метод цепочки:

UserRepository->getVehicles()->sedan;

В приведенном выше коде, getVehicles(), возвращает объект коллекции, который имеет НЕ свойство с именем sedan,
Вы должны использовать php __get() сделать операцию.
Почему тогда я это делаю? Потому что, если вы смогли выбрать автомобили по типу через свойство (помните, что свойства не являются функциями, выполнение не выполняется), то это буквально означает, что у вас есть выборки всех типов и они готовы:

Подход WRONG WAY и MEMORY-KILLER заключается в том, что вы выбираете всю машину пользователя и помещаете каждый тип в соответствующее свойство.

Лучше вернуть объект, затем объект поставляется с функцией __get() вызываться при каждом извлечении свойства:

$ Object-> седан;

sedan не существует, поэтому вы уже предсказали, что:

function __get($param)
{
$this->__getByType($param);
}

Хотя я предпочитаю свое самое первое предложение.

0

Другие решения

Других решений пока нет …