Size: a a a

Генератор непрочитанных сообщений

2020 May 05

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Daria Motorina
После обсуждения я бы ответила себе так, что фабрики - это не те классы, которые могут меняться до неузнаваемости, поэтому не надо их инжектить через DI
Представь что у тебя есть VO номера телефона, и в аппке ты хранишь его без кода страны, конструктор у тебя закрыт, поэтому объект из бд поднимается через create(string $phone)
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
И есть createFromUserInput(string $userInput) где ты валидируешь строку на то что это вообще номер телефона и обрезаешь лишнее
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Это только одна VO, а представь их сотни, в фабрике делать методы для всех? Или для каждого во своя фабрика?
источник

ЕР

Евгений Ромашкан... in Генератор непрочитанных сообщений
Daria Motorina
После обсуждения я бы ответила себе так, что фабрики - это не те классы, которые могут меняться до неузнаваемости, поэтому не надо их инжектить через DI
Отличие фабрик от статического конструктора в том что у них может быть какой-то стейт/контекст, которого нету у вызывающего класса, поэтому их может быть удобно инжектить
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Или есть у тебя ДТО для передачи рендереру хтмл на 15-20 полей, у которого есть статический метод создания, в который ты передашь объекты своей системы и получаешь дто с набором скаляров. Их тоже под фабрику?)
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Евгений Ромашкан
Отличие фабрик от статического конструктора в том что у них может быть какой-то стейт/контекст, которого нету у вызывающего класса, поэтому их может быть удобно инжектить
По моему это пахнет. И это уже не просто фабрика, а полноценный компонент например
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Фабрики нужны для прятанья простыни кода сложной инициализации объектов за лаконичным интерфейсом
источник

ЕР

Евгений Ромашкан... in Генератор непрочитанных сообщений
Dmitriy Tkachenko
Фабрики нужны для прятанья простыни кода сложной инициализации объектов за лаконичным интерфейсом
Сложная инициализация объектов попахивает)
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Евгений Ромашкан
Сложная инициализация объектов попахивает)
Да, обычно это не твой код)
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Например фабрика всего барахла для symfony/security
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Или например создание через  veryImportantThing(ThingDSN::fromString($dsnString), ThingConfig::fromArray($configArray)
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Можно обпазать фабрикой $thingFabric->create($dsnString, $configArray)
источник

ЕР

Евгений Ромашкан... in Генератор непрочитанных сообщений
У меня в коде фабрик почти нет, а те что есть (фабрики для инфраструктурных штук которые вызываются фреймворком и инжектится в сервисы уже результат) из моего кода не вызываются, впрочем
источник

ЕР

Евгений Ромашкан... in Генератор непрочитанных сообщений
Ну и да, у этих фабрик есть стейт, например, коннект к брокеру, через который можно создаваться уже множество консумеров с переменными параметрами.
От него можно в принципе избавиться и зарегистрировать коннект отдельным сервисом но смысла не вижу, да и менее удобно будет
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Удобнее, чтобы это был супервайзер, а не просто фабрика
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
если он воркеров создает, то пусть и следит за ними
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
ну т.е. какой смысл фабрики в этом случае? просто создавать воркеров по запросу? Обычно фабрика юзается для создания объекта с целью его использования в клиентском коде
источник

ЕР

Евгений Ромашкан... in Генератор непрочитанных сообщений
Dmitriy Tkachenko
ну т.е. какой смысл фабрики в этом случае? просто создавать воркеров по запросу? Обычно фабрика юзается для создания объекта с целью его использования в клиентском коде
> Обычно фабрика юзается для создания объекта с целью его использования в клиентском коде

Ну так оно так и юзается
источник

ЕР

Евгений Ромашкан... in Генератор непрочитанных сообщений
Создаётся консумер, инжектится в какой-либо сервис и используется в клиентском коде
источник

P

Panda🤔 in Генератор непрочитанных сообщений
Выдали зарплату...
источник