
Andrew
21.05.2018
17:08:24
Скажите пожаулйста DTO иммутабельны?

Артур Евгеньевич
21.05.2018
17:08:47

Andrew
21.05.2018
17:08:49
То есть нужно каждый раз новый дто делать, или можно внутри нарисовать метод changeValue
или еще проще, на прямую менять

Google

Andrew
21.05.2018
17:09:09
$dto->value1 = 'test';
@arturpanteleev если массив на тестостероне, тогда изменение делать на прямую
нет смысла лепить доп методы

Артур Евгеньевич
21.05.2018
17:10:22
тут сетеры чисто для того чтобы примитивную валидацию сделать

Andrew
21.05.2018
17:10:57
аааа, сеттеры когда валидируем
спасибо

Adel
24.05.2018
13:21:10
Есть какие-нибудь веские аргументы не юзать Service Locator? если человек не пишет юнит-тесты и не переносит классы из проекта в проект... то ему ведь не обьяснишь чем оно плохо.

Sergey
24.05.2018
13:21:43

Adel
24.05.2018
13:22:28
все говорят плохо :) я уже даже и поверил. и не юзаю. а тут я рраз и задумался. а чем? :)

Sergey
24.05.2018
13:22:40

Adel
24.05.2018
13:22:50
ну мне то юниттесты писать иногда надо.

Sergey
24.05.2018
13:22:58
и потом взвешивай плюсы, минусы, и есть ли разница в контексте того что ты описал

Google

Adel
24.05.2018
13:23:04
очень легко вытрезвляет. но мало кто пишет...

Sergey
24.05.2018
13:23:14

Maksim
24.05.2018
13:23:19
так-то сервис локатор с тестами не сильно полезен)

Dmitriy
24.05.2018
13:23:32
с юнит-тестами да

Adel
24.05.2018
13:23:34
тесты дурацкие получаются. неправильные.

Dmitriy
24.05.2018
13:23:37
с интеграционными норм

Sergey
24.05.2018
13:23:45

Dmitriy
24.05.2018
13:23:54
мокаешь сервис в SL и погнали

Sergey
24.05.2018
13:24:00
пример нормальных локаторов можешь подсмотреть в Laravel (если под php)

Dmitriy
24.05.2018
13:24:04
В Yii2 по другому никак

Adel
24.05.2018
13:24:05

Sergey
24.05.2018
13:24:16
да, менее явно, да менее удобно....
да, глобальный доступ к зависимостям
да, в неумелых руках можно в шаблонах каких видеть Database::query("SELECT ...")
но в легаси проекте который написан через жопу это может быть спасением. Ибо на DI ты быстро все не переведешь. А тут можно будет постепенно

Adel
24.05.2018
13:25:26
да. я как раз про ларавел. у них там вообще прикольно в плане тестинга. вот именно.
$this->assertDatabaseHas($table, array $data);

Dmitriy
24.05.2018
13:25:31
У сервис локатора ИМХО самый большой недостаток такой же, как и в симфони, когда было нормой сервисы делать публичными и не было автовайринга

Adel
24.05.2018
13:25:35
$this->assertSoftDeleted($table, array $data);

Google

Sergey
24.05.2018
13:26:19
ну собственно автовайринг и приватные сервисы + сказка что за счет инлайнинга быстрее будет сильно сказывается на умах тех кому пофигу

Dmitriy
24.05.2018
13:27:28

Sergey
24.05.2018
13:28:12

Dmitriy
24.05.2018
13:28:36
в чем проблема?

Sergey
24.05.2018
13:29:42
в том что ты задаешь такой вопрос))) ну мол.... довольно просто объяснить чем плохо инджектить контейнер, а вот почему структура проекта важна, что такое cohesion, почему не стоит ложить файлики по папочкам по типу (репозитории сюда, контроллеры сюда, сущности сюда, и еще утилиты сделаем потому что лень) намного сложнее)

Dmitriy
24.05.2018
13:30:30
попробуешь?

Adel
24.05.2018
13:30:48
"довольно просто объяснить чем плохо инджектить контейнер" - так ты так и не обьяснил! :)

Sergey
24.05.2018
13:31:12
попробуешь?
не, если интересно - почитай про типы cohesion-а
и что там зачем и причем тут coupling

Dmitriy
24.05.2018
13:31:53

Adel
24.05.2018
13:32:18

Sergey
24.05.2018
13:32:31

Adel
24.05.2018
13:32:42
так оно найдет.

Sergey
24.05.2018
13:32:43
ну блин, тем кому пофиг - им так и будет пофиг)
все эти загоны они как бы не про маленькие проекты на одного человека....

Adel
24.05.2018
13:33:05
в сишарпе - найдет. в php - тоже. если в ларке заюзан ide-helper

Sergey
24.05.2018
13:33:17
а хотя бы на проекты на одного человека где есть мечты "выстрелить" и стать проектом хотя бы человек на 50
ну и повторюсь - в ларке более-менее

Google

Sergey
24.05.2018
13:33:52
в симфони когда инджектиться весь контейнер и там были айдишки сервисов foo.bar.baz - чет как-то даже find usage не поможет
даже с symfony плагином

Adel
24.05.2018
13:34:01
да для любого Yii тоже можно наверняка нагенерить meta для шторма

Sergey
24.05.2018
13:34:09
это все про связанность и зацепление. Вот это все. Если ты с этими концепциями не разбирался - сложно объяснять.

Dmitriy
24.05.2018
13:34:58
в юи принято наследоваться от СЛ, чтобы понаписать докблоков на магические свойства
или ложить фейк-файл с СЛ с докблоками
совет от главного мейнтейнера юи

Adel
24.05.2018
13:36:03

Dmitriy
24.05.2018
13:36:23
от самдарка, щас китаец не при делах)

Aleh
24.05.2018
13:37:13
с сервеис локатором нет проблем см import в python/js. Но есть ограничение в виде того, что локатор не знает кому он отдает зависимость, т.е. нельзя раздать за одним сервисом разные реализации, как в случае инъекции(развернутой стрелочки)

Dmitriy
24.05.2018
13:37:53

Adel
24.05.2018
13:38:15
вот кстати и еще вопрос. мне ни разу в жизни не понадобилось раздавать разную реализацию. это когда нужно?

Aleh
24.05.2018
13:38:29
ну для этого надо выкручивать какие-то хитрые штуки, в случае нативных импортов вроде бы нет

Sergey
24.05.2018
13:41:53
Т.е. IoC в SL не реализуем?)
почему не реализуем? реализуем, у тебя ж потредитель ничего не знает о том как зависимость делается. а значит инверсия управления произведена
а вот инверсия зависимости с SL может быть только за счет какого-то промежуточного модуля который уже занимается подменой реализации (вот примерно как в Laravel)

Артур Евгеньевич
24.05.2018
13:43:27
Или логер, даже более частый пример

Google

Dmitriy
24.05.2018
13:44:33

Sergey
24.05.2018
13:45:02

Dmitriy
24.05.2018
13:45:11
а ты можешь реализацию хоть в рантайме менять

Adel
24.05.2018
13:45:15
ааа. ну декорация то понятно. это очевидно

Sergey
24.05.2018
13:45:46
проще всего это все воспринимать как "работает - не трогай" и когда хочешь расширить поведение - за счет композиции/агрегации уже мутить

Adel
24.05.2018
13:46:03
просто я видел что в сишарпе когда просишь зависимость в конструкторе то можно аттрибутом попросить себе чтото особенное :) и вот задумался - а зачем. класс то сам не должен знать

Sergey
24.05.2018
13:46:26

Adel
24.05.2018
13:46:57
так то да. но в каких случаях. если сверху, то правильнее все-таки в конфигураторе контейнера решать.. а не тут

Sergey
24.05.2018
13:49:05
это все к вопросом кто за что отвечает и кому что принадлежит (и какие файлы ты при каких ситуациях хочешь трогать а какие нет)