тому как правильнее оформлять код...рассудите)
Вот у меня есть который генерирует картинку с помощью GD, у него в конструкторе 3 интерфейса которые необходимы для нормального создания того что нужно
Есть 1 метод генерации, спор в том, что я считаю, что размеры картинки необходимо передавать в метод, чтобы мы проще могли использовать контейнер и не было сплошных new (new (new())), он говорит, что размер картинки - состояние объекта, неизменяемое в рамках 1 запроса и поэтому надо передавать эти параметры в конструктор...
Кто прав ?)
передавать надо в метод размер и файл, т.к. картинка может быть не одна или одна картинка будет преобразована в несколько размеров если передавать через конструктор, то не получиться сервис (класс) преобразования подтянуть через DI, выставив нужные имплементации интерфейсов да и хранения состояния это еще то гггг
Ну к состоянию не всегда согласен, иногда полезно В целом то что ты пишешь - ровно то, что говорю я) Тут ключевой аргумент что всегда когда надо будет создать картинку, мы через new должны создавать объекты, а у меня на new не очень хорошая реакция, даже ввиду невозможности тестирования и моков
где будет new? нет тут нигде new, у тебя будет ImageResizeSerice, которы зависит от трех интерфейсов, имплементация которых также у тебя есть и это тоже сервисные классы, ты в ServiceContainer прописываешь инициализациию, привязаваешь к интерфейсам имплементации и сервис ImageResizeService подтягиваешь в методе контролера где тут new?
Я так то с тобой согласен) Я про то, что если передавать размеры в конструктор, то при вызове сервиса надо будет явно передать реализации через new
если не обязательно, если вы все таки решили передавать через контрутор, то можно использовать контейнер для создания класс, т.е. app()->make(ImageResizeService::class, ['width' => 100, 'height' => 100]); т.е. параметры $width и $height вы передаете, а все остальное будет создано автоматически
Скажи ему, что Артём из чата смотрит на него как Ленин на буржуазию
Я знаю что так можно)) Но на дистанции какой профит ?)
Почему такое отношение к New, чем он вас так пугает, как по мне его не следует боятся например в слое инфраструктуры или внутри бизнес логики если не использовать внешние зависимости, это приведёт к связанности, но эта связанность будет нормальной если соблюдать принцип Единственной ответственности
Я так же ) Написал суда, чтобы провалидировать, может я че-то не понимаю ) Потому что там 100+ лет опыта и "я лучше знаю"))
Потомк что через new мы тащим кусок кода, который уже не будет покрыт юнит тестом и мы свяжемся с чем то, что выпиливать потом если придётся то будет очень больно )
Обычно не покрывают клиентский код юнит тестами, для него есть другие тесты. И если сделать код сильно отвязанным то тоже получишь антипаттерн. Если не ошибаюсь то прям в доках Di не рекомендуют злоупотреблять
По сути каждый сервис, который как то взаиможествует с внешними сервисами является клиентом)) Смотри, мне нужна стоимость заказа, я иду в репортаж и вытаскиваю все товары, клиентский код для репо - это мой сумматор стоимости каждой позиции, неужто я не должен покрыть его тестом ?
Обсуждают сегодня