Size: a a a

2021 September 12

А

Антон in Laravel Pro
Зависит от задачи. Можно ее спрятать за интерфейс, можно не прятать.
источник

А

Антон in Laravel Pro
Фабрика знает про тип, этого достаточно.
источник

A

Avatar in Laravel Pro
Кто знает как лаварель с git ставить.
источник

А

Антон in Laravel Pro
В моем варианте тип – это callable(): T. Стат. анализ на раз обломает тебя, если ты засунешь туда не то.
источник

В

Вадим in Laravel Pro
а у тебя были проблемы с этим? потомучто у меня нет
источник

В

Вадим in Laravel Pro
я про то что фабрика знает про типы
источник

А

Антон in Laravel Pro
Не очень понял вопрос. Фабрика должна знать про тип, который она может создать, ей незачем знать все варианты (а если их 1000?) этого типа.
источник

D

David in Laravel Pro
А если у класса будут зависимости?
источник

В

Вадим in Laravel Pro
возможно ты прав но у меня с подобным проблем небыло
и даже если там будет 1000 типов ты всеравно должен будешь их где то прописать или же аутолоад какойто делать
источник

А

Антон in Laravel Pro
$this->app->bind(ProductFactory::class, function (Application $app): ProductFactory {
    return new ProductFactory([
          'coffee' => static function () use ($app): Type {
                return $app->get(Coffee::class);
           },
            ...
      ]);
});
источник

А

Антон in Laravel Pro
Да. К сожалению или к счастью (кому как нравится), в ларке это надо делать руками, да, в симфони можно повесить тег и в компайлер-пассе получить все имплементации интерфейса, а дальше из них можно собрать такую же фабрику. Можно заинжектить ограниченный сервис-локатор ContainerInterface (опять же, такое возможно только в симфони), в котором будут ТОЛЬКО объекты конкретного интерфейса. Это плохо с точки зрения дизайна, но хорошо с точки зрения производительности, так как нужный объект создастся по требованию.
источник

D

David in Laravel Pro
М, логично)🌚
источник

В

Вадим in Laravel Pro
ну все же мы дошли до того что все упирается в сложность проекта, плюс моего варианта в том что он работает более очевидно
источник

В

Вадим in Laravel Pro
но твой мне нравится больше
источник

В

Вадим in Laravel Pro
спасибо что поделился
источник

А

Антон in Laravel Pro
Очевидно не значит хорошо. Лучше, когда зависимости явные и класс расширается без изменения его самого. Иначе всегда есть шанс его сломать. Да, твой вариант хорош в ограниченных случаях, там, где новый тип точно никогда не появится: например, калькулятор какой, где каждый тип – это математическая операция. Очевидно, если ты все операции покрыл типами, тебе можно их в классе калькулятора и прописать, так как новой мат. операции не будет.
источник

В

Вадим in Laravel Pro
главный минус твоего варианта в том что новичок просто может не понять его смысл или как он в целом работает
источник

ST

Sergey TS in Laravel Pro
Спасибо, все понятно. Про такие вещи в паттернах надо читать?
источник

А

Антон in Laravel Pro
Нет. И паттерны читать ради того, чтобы найти место, где их применить, тоже не надо. Просто решай проблемы. Со временем начнёшь замечать, что решаешь проблемы похожим образом, и придёшь к паттернам через опыт. Или почитай книгу банды четырёх.
источник

ST

Sergey TS in Laravel Pro
Так я через if в начале делал. Потом кто-то подсказал, что можно сделать так чтобы объект сам себя обновлял. Вот от туда уже пришел к варианту с полиморфизмом.
источник