Допустим, у меня есть совокупный корень с именем User
пользователь может иметь несколько Vehicle
, Vehicle
сущность имеет такие типы, как (suv
, truck
, sedan
, так далее …).
В том случае, если я хочу получить User
транспортные средства типа sedan
только я должен спроектировать мой агрегат, чтобы получить sedans
прямо из совокупности, как User->getSedans()
?
Или я могу получить это бросить UserRepository->getVehiclesOfTypeSedan()
и агрегаты содержат только Vehicles
?
Чтобы держать ваш интерфейс и наследование под рукой, я думаю, что лучше отделить вашу логику:
UserRepository->getVehicles("sedan");
Или вы можете использовать метод цепочки:
UserRepository->getVehicles()->sedan;
В приведенном выше коде, getVehicles()
, возвращает объект коллекции, который имеет НЕ свойство с именем sedan
,
Вы должны использовать php __get()
сделать операцию.
Почему тогда я это делаю? Потому что, если вы смогли выбрать автомобили по типу через свойство (помните, что свойства не являются функциями, выполнение не выполняется), то это буквально означает, что у вас есть выборки всех типов и они готовы:
Подход WRONG WAY и MEMORY-KILLER заключается в том, что вы выбираете всю машину пользователя и помещаете каждый тип в соответствующее свойство.
Лучше вернуть объект, затем объект поставляется с функцией __get()
вызываться при каждом извлечении свойства:
$ Object-> седан;
sedan
не существует, поэтому вы уже предсказали, что:
function __get($param)
{
$this->__getByType($param);
}
Хотя я предпочитаю свое самое первое предложение.
Других решений пока нет …