1

Позволяет сказать, что у меня есть совокупность корень имя User пользователь может иметь несколько Vehicle, то Vehicle компания имеет типы, такие как (suv, truck, sedan, и т.д ...) ,DDD дизайн агрегатных корней для отношения, которые имеют внутренние типы

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

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

+0

Первый вопрос, который вы должны задать, - это то, почему ваш агрегат 'User' имеет коллекцию транспортных средств. Какие инварианты вы пытаетесь обеспечить с помощью большого кластера 'User'? Вы можете сказать уникальность, но мы можем оставить это ограничение для базы данных, поэтому он не является инвариантом, который оправдывает проведение коллекции. Вы должны серьезно подумать о наличии «владельца» на «машине», который просто ссылается на 'id'' User'. Затем, получение транспортных средств будет выглядеть как «vehicleuleRepository.ofOwnerAndType (ownerId, vehicleuleType.Sedan)». – plalx

+0

Кроме того, в зависимости от вашего домена вы можете захотеть переименовать имя совокупного корня 'Пользователь'. В большинстве доменов обычно используются более подходящие имена (например, «Клиент»). – plalx

ответ

0

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

UserRepository->getVehicles("sedan"); 

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

UserRepository->getVehicles()->sedan; 

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

НЕПРАВИЛЬНЫЙ ПУТЬ И ПАМЯТЬ -KILLER APPROACH - вы получаете всю машину пользователя и помещаете каждый тип в связанное с ним свойство.

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

$ object-> седан;

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

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

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

Смежные вопросы