
Aleh
28.06.2017
19:52:05
ну статический метод
зачем лишний объект в этой цепочке?

Denis
28.06.2017
19:53:15

Google

Aleh
28.06.2017
19:53:45
json в объект\хешмап делает фремйворк
ну а дальше че плодить слои

Артур Евгеньевич
28.06.2017
19:54:37
зачем гетер и сетер? что значит описать свойства? Что за crud сервис?
Про геттеры и сеттеры я помню твою позицию, но пока я её полностью не пойму, я не смогу её начать лобировать на совем проекте. Оисать свойство имею ввиду просто добавить его в объект(ну и в моем случае указать аннотации). Ну а под CRUD интересует операции создания и изменения, которые принимают дохера параметров

Denis
28.06.2017
19:54:44
У тебя модель берёт на себя лишнюю ответственность.
Чем чище модель - тем лучше.

Aleh
28.06.2017
19:55:17
что значит “чище”?

Sergey
28.06.2017
19:55:21

Артур Евгеньевич
28.06.2017
19:55:52

Aleh
28.06.2017
19:55:59

Evgeniy
28.06.2017
19:56:02
кароче давайте репу на гитхабе

Denis
28.06.2017
19:56:02
что значит “чище”?
Значит делает только работу, для которой она и была создана. Бизнес логика если это домен

Evgeniy
28.06.2017
19:56:09
и каждый свой трушный вариант напишет)

Google

Evgeniy
28.06.2017
19:56:16
и будем сраться в пулл реквестах)

Sergey
28.06.2017
19:56:20

Aleh
28.06.2017
19:56:23

Артур Евгеньевич
28.06.2017
19:56:57

Evgeniy
28.06.2017
19:56:57
лол развидеть это

Denis
28.06.2017
19:57:25

Артур Евгеньевич
28.06.2017
19:57:35
если аменить его на dto будет автодополнение

Evgeniy
28.06.2017
19:58:09
так как ты создашь dto ?)

Артур Евгеньевич
28.06.2017
19:58:13
+ когда в пыхе будет тайпхинтинг для полей, то еще плюшки будут
это мы с тетсировщиком придумал схему сегодня

Evgeniy
28.06.2017
19:58:28
foreach в контроллер

Sergey
28.06.2017
19:58:38
Бизнес)
ты слишком абстрактно вещаешь.

Evgeniy
28.06.2017
19:58:41
пока никак)
этот метод на выходе тебе даст сущность формы

Aleh
28.06.2017
19:58:52
нет и нет

Evgeniy
28.06.2017
19:59:22
и ты без проблем уже имея весь автокомплит делаешь все остальное

Denis
28.06.2017
19:59:50

Google

Артур Евгеньевич
28.06.2017
20:00:03
вот есть массив с ебанутыми названиями элементов

Evgeniy
28.06.2017
20:00:17

Артур Евгеньевич
28.06.2017
20:00:22
ахах

Evgeniy
28.06.2017
20:00:26
@mkusher имхо норм вариант говорит, я согласен

Артур Евгеньевич
28.06.2017
20:00:31
слава богу что я заподозрил что тчо то не так))

Sergey
28.06.2017
20:00:32
"как-то ниочем" я то?))
ну тип "модель это бизнес логика", "модель должна быть чистой", "бизнес решает"... я понимаю о чем ты, но это звучит как масло маслянное.

Артур Евгеньевич
28.06.2017
20:00:36
не такой уж я безнадежный

Evgeniy
28.06.2017
20:01:00
сделай сущность формы

Aleh
28.06.2017
20:01:17

Evgeniy
28.06.2017
20:01:22
там весь твой автокомплит и все знания за то что в форме

Sergey
28.06.2017
20:01:29

Evgeniy
28.06.2017
20:01:38
и сделай или метод статичный который вернет тебе эту сущность
или консттруктор пусть массив сразу приниммает
если сделаешь статичный метод то по сути фабричный метод сделал для сущности

Denis
28.06.2017
20:02:26

Evgeniy
28.06.2017
20:02:27
далее уже это сущность все делает
у нее будет метод getЧТОТебеНадо

Sergey
28.06.2017
20:03:43

Evgeniy
28.06.2017
20:03:46
и в контролере код будет примерно такой $result = CurseForm::fromArray($formArray)->getЧтоТебеНадо(зависимости если есть необходимость);

Google

Sergey
28.06.2017
20:04:30
до этого юзал подходы с DTO, пробовал и DTO->toEntity и entity::fromDTO, и то и то так себе
проблема с тем что у тебя как бы либо DTO должно пренадлежать к тому же слою (fromDTO), либо размазывается все на два слоя (toEntity)
билдеры же и фабрики для порождения сущностей удобно, в них легко запихнуть бизнес логику и легко ее тестить

Артур Евгеньевич
28.06.2017
20:06:46
из массива?

Evgeniy
28.06.2017
20:06:57

Sergey
28.06.2017
20:06:58
а формы - это уже сверху все.

Evgeniy
28.06.2017
20:07:01
возня с ним
ты его по сути замапил на сущность
у тебя уже сущность

Admin
ERROR: S client not available

Evgeniy
28.06.2017
20:07:28
готовая
логика того как замапить лежит в фабричном методе

Артур Евгеньевич
28.06.2017
20:07:46
но его не одобрили

Sergey
28.06.2017
20:08:05

Evgeniy
28.06.2017
20:08:22
главное не делать over enginiring
лучше взять простой подход и если что потом его отрефакторить
чем пытаться предположить что понадобиться в дальнейшем

Артур Евгеньевич
28.06.2017
20:08:53

Google

Denis
28.06.2017
20:09:13
Тебе нужно из json (другое представление данных) создать сущность. Dto, в данном случае описывает данные полученные в запросе, и создаёт на их основе сущность. Билдер антипаттерн. Если нужен Билдер - значит уменьшай размер сущности/ разбивай её. В итоге dto в данном случае это таже фабрика.

Sergey
28.06.2017
20:09:56

Артур Евгеньевич
28.06.2017
20:10:28
давайте более предметно. Есть урок, у него обязательные два поля - учебный пан и время начала. И дохера всяких необязательных, но имеющих некоторую валидацию. Как бы вы организовали путь от массива до сущности с учетом разных наборов параметров.

Evgeniy
28.06.2017
20:10:45

Sergey
28.06.2017
20:11:05
Д - декомпозиция
группировать надо исходя из того для чего они нужны
и как используются
"то что используется вместе - ложим вместе, что используется отдельно - ложим отдельно"

Артур Евгеньевич
28.06.2017
20:12:31

Sergey
28.06.2017
20:13:36
и валидировать массив
или сразу json

Артур Евгеньевич
28.06.2017
20:14:05
потому что контроллер я вижу как инфраструктурный слой
и на моя взгляд он не должен смотреть н атакое : если, задана время начало, то задать и время конца обязательно

Aleh
28.06.2017
20:14:28
такой себе аргумент)

Sergey
28.06.2017
20:14:39
а валидация входящих данных это прям бизнес логика? бизнес правила, правила валидации у тебя могут лежать в слое предметной области, но валидатор это такая же инфраструктура
далее у тебя бизнес логика должна предотвращать невалидные данные. То есть если с реквестом все хорошо - и дальше все должно быть хорошо. Дальше контроллера смысла юзать валидатор нет.

Артур Евгеньевич
28.06.2017
20:15:33
есть разная валидация. Одно дело проверить что поля не пустые, или что число это число, а не строка
хм
а поповоду вынести поля как valObject, там типо такие поля - is_hidden, is_deeted, payed_status, timezone, show_in_timetable, show_on_site и т.ж
то есть флаги в оснвоном