
Sergey
30.11.2017
18:40:34
более того, ты так или иначе контроилруешь типы когда данные внутрь объекта попадают
например - через конструктор
а наружу их зачем выпускать?

Sasha
30.11.2017
18:40:50
а еще есть проперти без сеттеров

Google

Pavel
30.11.2017
18:40:53

Sergey
30.11.2017
18:41:00
и как в java9 походу будет

Aleserche
30.11.2017
18:41:26
А что выпускать? Проперти? Они же не RO

Sergey
30.11.2017
18:41:34
вот тут выше скинули ссылку про primitive obsession.

Sasha
30.11.2017
18:41:41
id например

Sergey
30.11.2017
18:41:41
еще можно почитать про anemic model
операция какая-нибудь

Aleserche
30.11.2017
18:43:32
Сходу хотел про uuid загнуть, но это немного не то
Вот так всегда, когда дело доходит до примеров, все становится печально

Sergey
30.11.2017
18:47:54

Google

Aleserche
30.11.2017
18:48:00
Давай так, у нас есть объект, которым мы обмениваемся с какой-нибудь системой. В него нужно что-то записывать, а потом считывать. Пусть это будет пакет, который хранит id, body и еще что-нибудь

Alan
30.11.2017
18:51:39
наверное надо добавить больше инфы о том какое у него поведение иначе это массив)

Big_Shark
30.11.2017
18:51:43

Pavel
30.11.2017
18:53:08

Sergey
30.11.2017
18:53:23

Big_Shark
30.11.2017
18:54:41

Sergey
30.11.2017
18:55:12

Big_Shark
30.11.2017
18:55:20

Pavel
30.11.2017
18:55:23

Sergey
30.11.2017
18:55:33
можно поставить в phpdoc @readonly и натравить статический анализатор
https://github.com/phpstan/phpstan/blob/master/tests/PHPStan/Rules/Properties/data/writing-to-read-only-properties.php

Big_Shark
30.11.2017
18:57:46

Alan
30.11.2017
18:57:53

Sergey
30.11.2017
18:58:19
почему у людей сразу "если нет геттера - значит есть публичные свойства"

Pavel
30.11.2017
18:58:36
Можно линк?
https://github.com/symfony/symfony/pull/24180
https://github.com/symfony/symfony/pull/23834

Aleserche
30.11.2017
18:59:11
Действительно, если можно просто __toString

Alan
30.11.2017
18:59:11
так, про публичные в иммутабельном ты же сам написал)

Google

Big_Shark
30.11.2017
18:59:24

Sergey
30.11.2017
18:59:32
я предложил тебе задачку
попробуй решить ее без геттеров и сеттеров
тебе тут не нужен UI
нет базы данных
только php

Aleserche
30.11.2017
19:00:14
А что разрешить-то?

Pavel
30.11.2017
19:00:17

Aleserche
30.11.2017
19:00:30
Ну т.е. какой апи должен быть?

Sergey
30.11.2017
19:00:49
А что разрешить-то?
у тебя есть класс User, в котором надо сделать возможность смены пароля. Для смены надо предоставить старый, и если он не ок - кинуть исключение

Sergey
30.11.2017
19:01:24
у тебя вот был setPassword и getPassword
потом какой-нибудь UserManager

Big_Shark
30.11.2017
19:01:40

Sergey
30.11.2017
19:01:50

Aleserche
30.11.2017
19:01:58

Sergey
30.11.2017
19:02:25
добавляем новое требование - запрещено юзать пароль который ты уже юзал (например проверять последние 10 паролей)
тебе надо для этого геттеры и сеттеры при таком подходе?
короч ложить поведение рядом с данными. Ну то есть ООП делать

Google

Aleserche
30.11.2017
19:03:15
Держать стек внутри и чекать?

Sergey
30.11.2017
19:03:22
геттеры для UI в отсутствии альтернатив (view model) - ну тут уж ничего не поделать. Но это вообще как по мне смешивание ответственности
обработка и вывод данных

Aleserche
30.11.2017
19:05:26
Если подумать, то у меня геттеры в основном для шаблонов. Меня больше беспокоит как быть с жирными конструкторами. Скорее из-за них начинаешь городить сеттеры

Sergey
30.11.2017
19:05:44
жирные конструкторы - маленькая проблема. Ну и есть билдеры
что бы туда сеттеры вынести
есть DTO

Admin
ERROR: S client not available

Sergey
30.11.2017
19:06:04
много чего есть
надо только захотеть

Aleserche
30.11.2017
19:07:38
В каком-то яп в момент создания объекта создаются виртуальные сеттеры из параметров, которые указаны в конструкторе. После создание объекта, сеттеры закрываются
Если нужно обработать данные из этих сеттеров, то на них нужно просто подписаться

Big_Shark
30.11.2017
19:13:03
https://github.com/symfony/symfony/projects/6#card-4422613 интересно
Судя по всему yml будут вырезать
Ну точней максимально вырезать

Alan
30.11.2017
19:14:03
про анемичное... а если у меня есть коробка в которой много предметов разной стоимости, и нужно чтоб выпал один из них - выигрыш, а шансы на предметы в коробке считаются от их стоимости.
делаем $box->getDrop()
а что делать когда шансы вдруг станут обсчитываться сторонним сервисом через api? можно не выносить это в отдельный сервис? потом появятся разные другие коробки у которых шансы будут обсчитываться еще парой разных способов

Sergey
30.11.2017
19:20:09
а могут и посчитать)

Alan
30.11.2017
19:20:32
коробка может - предметы в ней

Google

Sergey
30.11.2017
19:20:50
коробке в целом пофиг что за предметы - так?
это считай просто коллекция
ей важна только стоимость что бы построить распределение, так?

Alan
30.11.2017
19:21:11
да пофиг

Sergey
30.11.2017
19:21:26
не, когда пофиг это менеджеры и анемичные модели)

Alan
30.11.2017
19:22:04
ну хорошо следующий шаг - не пофиг, коробке важно что у нас в наличии есть, а это лежит где то в другом апи (остатки)

Sergey
30.11.2017
19:22:19
короч опиши задачу нормально

Alan
30.11.2017
19:22:36
ну предметы в ней - для витрины чтобы показать
а реально доставить можем только то что в наличии на складе
и хотим что б оно выпадало, управлять остатками чтоб
но показываем все - и то чего сейчас у нас нет
то есть чтоб выдать из коробки выигрыш нужно сходить по апи за текущими остатками и из того что есть в наличии + ориентируясь на стоимость предмета - посчитать шансы и выдать приз

Sergey
30.11.2017
19:28:56

Alan
30.11.2017
19:30:37
и в лотерее учавствует то чего нет?)
да, что то дорогое чего в наличии изначально было мало - привлекает, но быстро кончается на складе. дорогое мы всеравно показываем до лотереи а выдаём что осталось
потом оно может быть докуплено нами и тоже будет выпадать

Sergey
30.11.2017
19:57:23
еще пара вопросов которые я бы задал составителю требований:
- что значит "показываем до лотереи"? Что-то типа рассылки?
- Что будет если нам выпал товар, которого 1 единица на складе, и пока мы его выбирали лотереей кто-то его уже купил? На каком этапе должна происхоидть резервация товаров? Система резервации товаров наша или внешняя?


Alan
30.11.2017
20:05:54
> - что значит "показываем до лотереи"? Что-то типа рассылки?
показываем на странице коробки - ее содержимое, все что может выпасть и могло бы, если бы было в наличии, пользователь об остатках и наличии не знает. запускает лотерею - получает выигрыш
> Что будет если нам выпал товар, которого 1 единица на складе, и пока мы его выбирали лотереей кто-то его уже купил? На каком этапе должна происхоидть резервация товаров? Система резервации товаров наша или внешняя?
резервации нет, если так уж случилось что предмет в наличии 1 а выпал 5 игрокам то получает тот кто первый нажмет - ЗАБРАТЬ, остальные увидят статус - доставка, когда предмет докупят и он появится - будет переотправка и пользователь его получит. то есть подождать свой выигрыш если он кончился - норм, но мы стараемся избежать этого
склад у которого мы узнаем остатки чтобы подсчитать шансы - внешняя система

Big_Shark
30.11.2017
20:35:43
Дока у симфони меняется прям налету )

Антон
30.11.2017
20:39:48
ranbox напоминает