169 похожих чатов

Коллеги, доброго вечера ) Подскажите возник спор с товарищем по

тому как правильнее оформлять код...рассудите)

Вот у меня есть который генерирует картинку с помощью GD, у него в конструкторе 3 интерфейса которые необходимы для нормального создания того что нужно

Есть 1 метод генерации, спор в том, что я считаю, что размеры картинки необходимо передавать в метод, чтобы мы проще могли использовать контейнер и не было сплошных new (new (new())), он говорит, что размер картинки - состояние объекта, неизменяемое в рамках 1 запроса и поэтому надо передавать эти параметры в конструктор...

Кто прав ?)

13 ответов

32 просмотра

передавать надо в метод размер и файл, т.к. картинка может быть не одна или одна картинка будет преобразована в несколько размеров если передавать через конструктор, то не получиться сервис (класс) преобразования подтянуть через DI, выставив нужные имплементации интерфейсов да и хранения состояния это еще то гггг

E-V. Автор вопроса

Ну к состоянию не всегда согласен, иногда полезно В целом то что ты пишешь - ровно то, что говорю я) Тут ключевой аргумент что всегда когда надо будет создать картинку, мы через new должны создавать объекты, а у меня на new не очень хорошая реакция, даже ввиду невозможности тестирования и моков

E V.
Ну к состоянию не всегда согласен, иногда полезно ...

где будет new? нет тут нигде new, у тебя будет ImageResizeSerice, которы зависит от трех интерфейсов, имплементация которых также у тебя есть и это тоже сервисные классы, ты в ServiceContainer прописываешь инициализациию, привязаваешь к интерфейсам имплементации и сервис ImageResizeService подтягиваешь в методе контролера где тут new?

E-V. Автор вопроса
Egor Gruzdev
где будет new? нет тут нигде new, у тебя будет Im...

Я так то с тобой согласен) Я про то, что если передавать размеры в конструктор, то при вызове сервиса надо будет явно передать реализации через new

E V.
Я так то с тобой согласен) Я про то, что если пере...

если не обязательно, если вы все таки решили передавать через контрутор, то можно использовать контейнер для создания класс, т.е. app()->make(ImageResizeService::class, ['width' => 100, 'height' => 100]); т.е. параметры $width и $height вы передаете, а все остальное будет создано автоматически

Скажи ему, что Артём из чата смотрит на него как Ленин на буржуазию

E-V. Автор вопроса
Egor Gruzdev
если не обязательно, если вы все таки решили перед...

Я знаю что так можно)) Но на дистанции какой профит ?)

E V.
Я так то с тобой согласен) Я про то, что если пере...

Почему такое отношение к New, чем он вас так пугает, как по мне его не следует боятся например в слое инфраструктуры или внутри бизнес логики если не использовать внешние зависимости, это приведёт к связанности, но эта связанность будет нормальной если соблюдать принцип Единственной ответственности

E-V. Автор вопроса
Артём
Скажи ему, что Артём из чата смотрит на него как Л...

Я так же ) Написал суда, чтобы провалидировать, может я че-то не понимаю ) Потому что там 100+ лет опыта и "я лучше знаю"))

E-V. Автор вопроса
Evgenii Glechikov
Почему такое отношение к New, чем он вас так пугае...

Потомк что через new мы тащим кусок кода, который уже не будет покрыт юнит тестом и мы свяжемся с чем то, что выпиливать потом если придётся то будет очень больно )

E V.
Потомк что через new мы тащим кусок кода, который ...

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

E-V. Автор вопроса
Evgenii Glechikov
Обычно не покрывают клиентский код юнит тестами, д...

По сути каждый сервис, который как то взаиможествует с внешними сервисами является клиентом)) Смотри, мне нужна стоимость заказа, я иду в репортаж и вытаскиваю все товары, клиентский код для репо - это мой сумматор стоимости каждой позиции, неужто я не должен покрыть его тестом ?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта