
Sergey
15.12.2017
08:58:33
надо бы пометить статью что "подход устарел"

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
секундочку

Sergey
15.12.2017
09:00:46

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

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

Google

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

Артур Евгеньевич
15.12.2017
09:04:03


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

Sergey
15.12.2017
09:05:31

Sergey
15.12.2017
09:06:20

Sergey
15.12.2017
09:06:40
и поскольку это происходит на CI - меня это не особо парит
сейчас я юзаю phan и он помедленее работает - где-то минуту
но это всеравно быстрее чем проверка в рантайме
и если для тебя это критично - ну ок

Sergey
15.12.2017
09:07:43

Sergey
15.12.2017
09:08:01

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:31

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/сущностях дают тебе ту же проверку типов?

Sergey
15.12.2017
09:12:16

Google

Sergey
15.12.2017
09:12:33
конструкторы
ну норм, конструкторы я не агитирую не писать, наоборот
даже если ты юзаешь публичные поля для DTO - ты всеравно наполнять можешь через конструктор, это как бы нормальная практика
в смысле?
ну всмысле метод rename(string $name): void тебя устраивает с точки зрения проверкти типов?
сеттеры для DTO (например для форм) - предмет отдельного разговора и тут, в силу ограничений языка, возможно сеттеры норм. Во всяком случае тут главный вопрос зачем ты их написал. Поскольку это DTO - тут все варианты в целом валидны. Согласен?
в любом случае обычно для таких DTO у тебя будет еще отдельный этап валидации данных

Sergey
15.12.2017
09:15:27

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

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:11

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

Sergey
15.12.2017
09:24:01

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

Sergey
15.12.2017
09:24:58

Sergey
15.12.2017
09:25:35
в том то и дело
если я вижу setName то я почти уверен что внутри как раз то что я ожидаю
если я вижу rename, то мне еще придется заглянуть во внутрь и посмотреть не делает ли он того что мне не нужно

Sergey
15.12.2017
09:26:33