@springimport

Как организовать фабрику?

В приложении такая структура:

Component\service\CatalogProductRepository
Component\domain\CatalogProductRepositoryInterface
Component\cache\CatalogProductRepositoryCache

Возникла проблема с использованием этого компонента. В данный момент для инициализации нужно выполить:
$baseModel = new Component\service\CatalogProductRepository;
$cache  = new Component\Cache;
$model = new Component\cache\CatalogProductRepositoryCache($baseModel, $cache);

Пришла идея использовать фабрику, но как ее правильно сделать - не ясно. Я вижу 2 варианта:
1. Component\factory\CatalogProductRepositoryFactory.
$model = CatalogProductRepositoryFactory::create(true); // create($useCache = false)

Но для каждой сущности придется создавать свою фабрику.
2. Component\Factory.
$model = Factory::create('CatalogProductRepository', true); // create($model, $useCache = false)


Что лучше?

p.s. идея от Сергей Протько
  • Вопрос задан
  • 408 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Может ну его? Реально? Попробуйте прочитать этот код кому-нибудь, он же не читается. Понятия не имею почему вы решили назвать репозиторий для продукта CatalogProductRepository. Или зачем вам фабрика. Ну и еще - зачем вы инстанцируете все руками. И что это за true.

Оба варианта как по мне изобилуют излишней сложностью, неочевидны и т.д. и т.п.

Я предлагаю вам вооружиться DependencyInjection. Реализация оного есть в любом уважающем себя фреймворке. И избавьтесь от непонятных и неявных констант.

Моя "идея" заключалась лишь в использовании декоратора для реализации логики кеширования. Суть идеи простая - что бы добавить кеширование не нужно ничего править ни в логике использующую репозиторий, ни в самом репозитории.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы