Должна ли фабрика отвечать за поиск моделей и их создание?
например:
Если бы у меня была модель продукта, должны ли на ее фабрике такие методы:
$product = $productFactory->findByID(32);
$product = $productFactory->all();
$product = $productFactory->findByName($productName);
$product = $productFactory->create($data);
Ну вообще то Factory Pattern
это creational pattern
который использует фабричные методы для решения проблемы создания объектов даже без указания статического класса, что означает, что он создает объекты динамически на run-time
, Этот шаблон используется для работы с механизмами создания объектов, которые позволяют клиентскому классу использовать динамический класс, построенный во время выполнения. В этом шаблоне используется фабричный метод (абстрактный), и этот метод создает объекты с использованием других классов / объектов в зависимости от запроса клиентского класса, который использует встроенный объект. Ну, в общем, это широкая вещь.
Вместо того, чтобы думать в шаблонах дизайна, таких как шаблон, которому вы должны следовать, попытайтесь выяснить варианты использования вашего класса и использовать их соответственно. Скорее всего, вы имели в виду Model
как классы, которые расширяются Eloquent
ORM, и в этом случае ваши классы моделей уже имеют эти методы, если вы расширили Eloquent ORM
поэтому вам не нужно создавать их в ваших классах, но для разделения бизнес-логики и уровня БД вы можете использовать обычные классы, где вы можете использовать эти классы в качестве зависимостей для вызова методов из ваших классов уровня базы данных. возможно, это звучит странно в любом случае.
От вас зависит, как вы организуете свою структуру каталогов, а думаете только о SoC и этого достаточно, чтобы получить идею для чистого архитектурного шаблона приложения. Не думайте слишком глубоко о шаблонах проектирования, вместо этого думайте о чистой модели приложения, вот и все. Наверное эта статья может вам помочь немного (специально обсуждалось с помощью Laravel
а также Repository Pattern
).
За Factory Pattern
Вы можете проверить этот простая, но полезная статья.
Других решений пока нет …