@symfony_php

Страница 493 из 1418
Sergey
15.12.2017
08:58:33
Твои же за АПИ?
1. это перевод 2. прошло 5 лет

надо бы пометить статью что "подход устарел"

Sergey
15.12.2017
08:58:58
http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html вот егор с такими заявлениями выступает на профильных конференциях, и они не очень то заходят. у народа появляется много вопросов на которые сложно ответить и в принципе пригорает у людей)

Sergey
15.12.2017
08:59:08
ну вот да

Google
Sergey
15.12.2017
08:59:13
потому и говорю - Whole Value

надо за это топить

и можно подходить с позиции проблемы

Sergey
15.12.2017
08:59:35
начинается все с того что "геттеры сеттеры это плохо", а как быть с DTO, VO? - и тут шок "это тоже плохо"

вернуть данные из обьекта - плохо

и так до клиники

Sergey
15.12.2017
09:00:15
начинается все с того что "геттеры сеттеры это плохо", а как быть с DTO, VO? - и тут шок "это тоже плохо"
DTO имутабельны, да и геттеры там не особо нужны. VO - там не нужны ни геттеры ни сеттеры

секундочку

Sergey
15.12.2017
09:00:46
DTO имутабельны, да и геттеры там не особо нужны. VO - там не нужны ни геттеры ни сеттеры
в пхп геттеры/сеттеры тебе дают 2 вещи. 1 - проверку типов, 2 - ридонли для полей

Sergey
15.12.2017
09:00:58
цитата из драфта "недописанной" статьи на тему "Вам возможно не нужны геттеры и сеттеры" > Перед тем как начать, стоит прояснить один очень важный момент. А именно, что имеется ввиду когда я говорю "сеттер" или "геттер". Под "*сеттером*" и "*геттером*" мы будем подразумевать следующее: *это некая функция/метод, который должен быть вызван для доступа к свойству объекта*.

в пхп геттеры/сеттеры тебе дают 2 вещи. 1 - проверку типов, 2 - ридонли для полей
1. проверку типов мне дает phpstan/phan 2. аналогично. Мне не интересно это в рантайме делать

Sergey
15.12.2017
09:02:25
phpstan слишком медленный чтобы его на каждый билд запускать

Google
Sergey
15.12.2017
09:02:36
локально этого никто не делает, иногда даже тесты не запускают перед коммитом

и от лишней проверки в рантайме никто не пострадает. хуже когда ее нет

Борис
15.12.2017
09:04:38
давайте мы не будем скатываться в то во что превратился пхп чатик соседний
А может замутим какой-нить манифест и запиним его? 1. Это чат про симфони. 2. Это чат ТОЛЬКО про симфони. 3. Если вы хотите обсудить просто пхп, ооп и другие вещи - вам здесь НЕ рады. 4. Если вы хотите задать вопрос, сначала погуглите. 5. Погуглите еще раз, посмотрите документацию соответствующего симфони компонента. 6. Задавайте вопрос. Не здоровайтесь "отдельным" привет, сразу в одном предложении задавайте вопрос. 7. Пользуйтесь Reply чтобы диалог можно было отследить 8. Не согласные могут не пользоваться чатом. Или идут **{тут еще не решил... можно просто оставлю нахуй? }

Sergey
15.12.2017
09:05:31
phpstan слишком медленный чтобы его на каждый билд запускать
серьезно? может ты и тесты не на каждый билд запускаешь?

Sergey
15.12.2017
09:06:20
Sergey
15.12.2017
09:06:40
тесты это 2 секунды максимум времени
я рад что у тебя это две секунды, у меня это секунд 30, phpstan выполняется так же секунд 30

и поскольку это происходит на CI - меня это не особо парит

сейчас я юзаю phan и он помедленее работает - где-то минуту

но это всеравно быстрее чем проверка в рантайме

и если для тебя это критично - ну ок

Sergey
15.12.2017
09:08:01
пхпстан выполняется 6 минут щас у нас
а как быстро ты узнаешь из рантайма что накосячили с типами?)

Sergey
15.12.2017
09:08:11
логи)

Sergey
15.12.2017
09:08:29
что логи? логи это способ а не средняя оценка времени

у меня тоже алертика есть допустим

Sergey
15.12.2017
09:08:57
если типы не совпадают в рантайме, пхп об этом скажет в довольно грубой форме

а это все идет в логи

это очень редкий кейс что у нас с типами накосячили

Sergey
15.12.2017
09:09:23
как быстро от момента пуша в гит до момента "попало в логи" у тебя времени проходит?)

Google
Sergey
15.12.2017
09:09:32
давай скорее так

"как быстро от момента пуша в гит до момента раскаталось по всему кластеру у тебя времени проходит?"

Sergey
15.12.2017
09:10:10
так что может и неделя пройти

но на стэйджинг - например в течении часа

если кто-то что-то обновляет

но не факт что именно этот кусок системы кто-то будет запускать

и с нужными условиями что бы косяк всплыл

Sergey
15.12.2017
09:10:56
а дев ветки это вообще горячие точки

Sergey
15.12.2017
09:11:03
так

давай совсем по другому

Sergey
15.12.2017
09:11:14
ибо ты свел все в какую-то чернь уже

Sergey
15.12.2017
09:11:15
всякие phpstan и пхпюнит с code coverage запускаются в отдельном неблокирующем джобе на ci

я к тому что phpstan который выжирает 6 минут запускать вместе с билдом это хреновая затея. по крайней мере у нас

Sergey
15.12.2017
09:11:52
давай проще

1. ты пишешь сеттеры в DTO? в VO?

2. нормальные методы в VO/сущностях дают тебе ту же проверку типов?

Google
Sergey
15.12.2017
09:12:33
конструкторы
ну норм, конструкторы я не агитирую не писать, наоборот

даже если ты юзаешь публичные поля для DTO - ты всеравно наполнять можешь через конструктор, это как бы нормальная практика

в смысле?
ну всмысле метод rename(string $name): void тебя устраивает с точки зрения проверкти типов?

сеттеры для DTO (например для форм) - предмет отдельного разговора и тут, в силу ограничений языка, возможно сеттеры норм. Во всяком случае тут главный вопрос зачем ты их написал. Поскольку это DTO - тут все варианты в целом валидны. Согласен?

в любом случае обычно для таких DTO у тебя будет еще отдельный этап валидации данных

Sergey
15.12.2017
09:15:57
иммутабельности нет
окей, ты запихнешь это дело в конструктор из формы?

или тебе проще когда форма мэпит на поля (напрямую или через сеттеры)

Sergey
15.12.2017
09:16:23
Admin
ERROR: S client not available

Sergey
15.12.2017
09:16:48
окей, ты запихнешь это дело в конструктор из формы?
если мне нужно, то сделаю свои маппинги для формы

Sergey
15.12.2017
09:17:15
окей, тогда выходит сеттеры для DTO не нужны вообще

(ну и если нужны - это ситуация с компромисами)

устраивает?

а для сущностей сеттеры еще более не нужны

так?

Sergey
15.12.2017
09:17:54
погодь ты с сущностями

Sergey
15.12.2017
09:18:22
окей, для DTO сеттеры нужны? можно ли факт наличия сеттеров для DTO считать компромисным вариантом в силу ущербности php?

дабы не писать мэпперы для каждой формы

Google
Sergey
15.12.2017
09:19:15
у тебя есть DTO, конструктор нужен там чтобы удостоверится что будет валидное состояние и проверить типы геттеры нужны чтобы дать ридонли полям поэтому мы не можем просто так взять и захреначить публичные поля. phpstan не панацея

Sergey
15.12.2017
09:19:33
у DTO в 90% случаев нет сеттеров

Sergey
15.12.2017
09:19:40
давай сначала с ними разберемся ибо с ними проще

цель DTO - трансфер данных, и если тебе удобнее производить контроль за доступом к данным через геттеры - в контексте DTO я не вижу тут ничего плохого

тут наверное мотивация не верна - важно не отсутствие геттеров/сеттеров, а то, для чего ты их написал

в случае с DTO ты свою позицию описал и для твоего случая в этом есть очень немало смысла

у тебя тут геттеры для изоляции данных, предоставления read only данных и гарантия имутабельности

а если ты написал геттеры и сеттеры просто потому что "видел где-то в доке" и сделал так же - сам понимаешь что тут уже есть варианты

Sergey
15.12.2017
09:22:38
я не вижу в сеттерах ничего плохого если соблюдается 2 параметра: - эти данные нельзя поместить в конструктор или именованный конструктор - этим методам нельзя дать более адекватное название как твой пример с rename остальное это все ни о чем

Sergey
15.12.2017
09:23:32
ах да, есть еще 3й параметр - плохо если тебя вынуждают писать сеттеры всякие symfony forms, sonata bundle и тд. всегда есть обходные пути

setName($firstName, $lastName) - это сеттер?
нет, это гавеное название метода

Sergey
15.12.2017
09:24:01
нет, это гавеное название метода
окей, setName($name) - это сеттер? или говеное название метода?)

Sergey
15.12.2017
09:24:09
это сеттер

setName($firstName, $lastName) - это сеттер?
была б перегрузка методов, то позиция была б другой

Sergey
15.12.2017
09:24:58
и если внутри у тебя $this->name = $name
но ты смотришь с позиции интерфейса. ты не знаешь что внутри

Sergey
15.12.2017
09:25:35
в том то и дело

если я вижу setName то я почти уверен что внутри как раз то что я ожидаю

если я вижу rename, то мне еще придется заглянуть во внутрь и посмотреть не делает ли он того что мне не нужно

Страница 493 из 1418