@oop_ru

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

Артур Евгеньевич
21.05.2018
17:08:47
Скажите пожаулйста DTO иммутабельны?
нет, dto это массив на тестостероне

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? если человек не пишет юнит-тесты и не переносит классы из проекта в проект... то ему ведь не обьяснишь чем оно плохо.

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

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
У сервис локатора ИМХО самый большой недостаток такой же, как и в симфони, когда было нормой сервисы делать публичными и не было автовайринга
автовайринг непричем. И без него жить можно. А вот отсутствие ограничений, лень разработчиков и желание запихнуть контейнер в любую дырку.... вот да... это похуже чем то что в ларавель

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

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
Зависимости не объявлены в контракте класса, т.е. неочевидны и непредсказуемы
да. для меня это очевидно плохо. а тому кто не пишет юниттесты? работает же!

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. Но есть ограничение в виде того, что локатор не знает кому он отдает зависимость, т.е. нельзя раздать за одним сервисом разные реализации, как в случае инъекции(развернутой стрелочки)

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
"довольно просто объяснить чем плохо инджектить контейнер" - так ты так и не обьяснил! :)
1. Даем классу доступ ко всем сервисам проекта, тем самым потенциально убиваем инкапсуляцию(правда это решается созданием нескольких ограниченных сервис локаторов в рамках модуля) 2. Клиентский код получает ненужные знания об инфраструктуре(код сервиса) 3. Неявные зависимости класса 4. Отсутсвие строгой типизации для пробрасываемых сервисов

вот кстати и еще вопрос. мне ни разу в жизни не понадобилось раздавать разную реализацию. это когда нужно?
Например интерфейс Notification - в каком то случае должен слать на почту, в каком то пуш, в кком то смс

Или логер, даже более частый пример

Google
Dmitriy
24.05.2018
13:44:33
вот кстати и еще вопрос. мне ни разу в жизни не понадобилось раздавать разную реализацию. это когда нужно?
Например у тебя класс зависим от контракта кэша PSR-6, и ему по барабану где этот кэш крутится - redis, db, files, да хоть на луну голубями кэш складывай. Главное твой класс с зависимостью от интерфейса кэшера сможет ложить туда кэш.

Sergey
24.05.2018
13:45:02
вот кстати и еще вопрос. мне ни разу в жизни не понадобилось раздавать разную реализацию. это когда нужно?
когда нужны разные реализации, декорация и т.д. это все про open/close и srp, сильно коррелируется.

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
просто я видел что в сишарпе когда просишь зависимость в конструкторе то можно аттрибутом попросить себе чтото особенное :) и вот задумался - а зачем. класс то сам не должен знать

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

Sergey
24.05.2018
13:49:05
так то да. но в каких случаях. если сверху, то правильнее все-таки в конфигураторе контейнера решать.. а не тут
как удобно. В PHP у тебя нет атрибутов и у тебя выбор - кастыли с docblock или внешний конфиг. Еще важный момент - это бывает что модуль не должен вообще заморачиваться (не твое не трогай)

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

Страница 652 из 785