Size: a a a

2021 April 27

SP

Sergey Protko in PHP
можно вводить конвеншены мол... то что можно импортировать - оно должно лежать на самом верху модуля. А то что нельзя - внутри где-то
источник

SP

Sergey Protko in PHP
или какие-либо еще...
источник

SP

Sergey Protko in PHP
например у меня есть внутри фичи конвеншен - какие-то референсы для композиции респонсов лежат в модуле Response какого-то контекста. На самом верху лежат вещи (обычно интерфейсики) которые можно юзать другим модулям. Тогда настроить это становится не так сложно
источник

SP

Sergey Protko in PHP
а вот "доменный сервис дернул сервис приложения" - тут мне сложно комментировать ибо я не могу придумать кейс для "сервисов домена у которых зависимости есть"
источник

SP

Sergey Protko in PHP
можно еще следить за afferent/efferent coupling. Мол... Если у тебя одно большое второе должно быть маленьким и наоборот.
источник

SZ

Sergey Zolotov in PHP
удобная и интуитивная штука кстати. если внутряк юзается где-то на уровне выше - выносишь его как модуль на этот уровень со всеми сопутствующими
источник

RD

Roman Dykyi in PHP
спасибо! нужно пересмотреть свой подход к разработке
источник

VK

Vinsentas Kovalevski... in PHP
Подскажите как записать время в куки
https://pastebin.com/La41bUrf
источник

Ю

Юра in PHP
привет
а поделитесь плз кто как фабрики у себя делает.

вот простейший пример:

class SomeFactory {
   public function getObject(int $type)
   {
       if ($type === 1) {
           return new Object1();
       }
       if ($type === 2) {
           return new Object2();
       }
   }
}

но хочется делать "по правильному" c di и контейнерами. Тогда делаешь так:

class SomeFactory {
   public function __construct(Object1 $object, Object2 $object2)
   ...
   
   public function getObject(int $type)
   {
       if ($type === 1) {
           return $this->object1;
       }
       if ($type === 2) {
           return $this->object2;
       }
   }
}

но тут очевидный недостаток, что всегда инстанциируются все зависимости, хотя получать мы будем только один инстанс. У зависимостей могут быть свои зависимости, они могут быть тажеловесный и все такое.

Можно прокидывать контейнер как зависимость и все тянуть оттуда, но это бэд практис.
Что посоветуете? Как вы делаете фабрики?
источник

DT

Dmitriy Tkachenko in PHP
Это уже не фабрика, а service locator
источник

Ю

Юра in PHP
а как реализовать фабрику с di и автовайрингом?
источник

А

Антон in PHP
Зачем тебе фарика, если объект можно получить автовайрингом? Фабрика для комплексных штук, которые собрать можно по условию или в зависимости от аргументов, неизвестных заранее, например.
источник

Ю

Юра in PHP
ну например у меня есть разные типы продуктов, я хочу получить продукт зная его тип
public function getProductByType(int $type)
но не хочу создавать new Product(), а так чтобы автоматически подтянуть зависимости продукта, если они есть
источник

k

knopkod4v in PHP
а что там за зависимости у продукта?
источник

Ю

Юра in PHP
В контексте моего вопроса не важно какие зависимости. Любые, логгер например, кеш, что угодно
источник

SP

Sergey Protko in PHP
Ммммммммм кэш и логгер в сущности?
источник

SP

Sergey Protko in PHP
Непонятно, либо ты сложно сформулировал либо тебя занесло не туда
источник

Ю

Юра in PHP
Попробую по-другому. Ну вот есть у меня фабрика, которая создает какие-то объекты, но у этих объектов есть свои зависимости. Как их получить через di? Прописывать в конструкторе фабрики?
источник

SM

Sergey Milimko in PHP
Передай то что реализует di в фабрику или обеспечь к нему глобальную точку доступа.
источник

SM

Sergey Milimko in PHP
Можно ещё AOP заюзать какой нибудь с аннотациями соответствующими.
источник