
Sergey
20.06.2018
12:28:49
это просто данные, это не инварианты твоих моделей

Artem
20.06.2018
12:41:05
а как обычно данные присылают сервису (ну, я так называю то, что вызывает контроллер)?
Вот пришёл реквест в контроллер, дальше в контроллере создаётся какой-то простой объект с набором данных и отправляется сервису? По идее это было бы удобно, особенно когда куча параметров приходит, потому-что иначе список параметров метода сервиса будет километровым

Tex
20.06.2018
12:44:36
сущности не валидируются кроме как по типам в конструкторе\мутаторах

Google

Artem
20.06.2018
12:45:27

Tex
20.06.2018
12:46:22
валидируешь данные, если есть ошибки - тут же формируешь респонз и кидаешь обратно.
если всё окей - пошёл в сервисы.

Artem
20.06.2018
12:48:33
но что тогда, если у нас 2 способа ввода информации:
1. Вэб морда
2. Пользователи скидываю xml на фтп и нам надо засосать всё это дело.
Конечно во втором случае валидация тоже нужна, а процесс её вызова получается завязан на контроллер


Tex
20.06.2018
12:51:29
но что тогда, если у нас 2 способа ввода информации:
1. Вэб морда
2. Пользователи скидываю xml на фтп и нам надо засосать всё это дело.
Конечно во втором случае валидация тоже нужна, а процесс её вызова получается завязан на контроллер
ну я отношусь к валидатору как к сервису в каком-то роде.
информация о том, как валидировать, лежит либо в нём, если он заточен под объект, либо как-то привязана к объекту, если валидатор обобщенный (как в симфони, например). ты можешь вызвать его в контроллере и собрать из ошибок нужный тебе вью (html, json, xml, whatever). можешь вызвать его в команде, которая разбирает xml, получить тот же набор ошибок, но поступить с ними уже иначе, на почту там отправить ошибку или тупо залогировать или что ты там хочешь.
т.е. дублируется между контроллером и командой только строчка $this->validator->validate(), не вижу в этом ничего страшного.

Sergey
20.06.2018
12:55:58

Artem
20.06.2018
13:02:08
UI - > DTO -> application
это да, но вопрос был скорее о том, в какой момент валидировать. Ну или я не понял твою мюсль. Вообще конечно выглядит логичным отдавать данные уже проверенные

Sergey
20.06.2018
13:02:43
> в какой момент валидировать.
между UI и приложением
у тебя эта штука называется контроллер
у меня - адаптер)
XML файл - это про batch процессинг который в целом может быть разбит просто на список DTO которые закидываются по одной


Artem
20.06.2018
13:03:32
ну я отношусь к валидатору как к сервису в каком-то роде.
информация о том, как валидировать, лежит либо в нём, если он заточен под объект, либо как-то привязана к объекту, если валидатор обобщенный (как в симфони, например). ты можешь вызвать его в контроллере и собрать из ошибок нужный тебе вью (html, json, xml, whatever). можешь вызвать его в команде, которая разбирает xml, получить тот же набор ошибок, но поступить с ними уже иначе, на почту там отправить ошибку или тупо залогировать или что ты там хочешь.
т.е. дублируется между контроллером и командой только строчка $this->validator->validate(), не вижу в этом ничего страшного.
У меня просто была мысль сделать объект Result, который бы содержал в себе ошибки и результат выполнения операции. Хотя там всё равно надо было бы вызывать метод проверки есть ли ошибки...

Tex
20.06.2018
13:05:57

Google

Artem
20.06.2018
13:06:34
у меня - адаптер)
вот кстати недавно меня начал занимать вопрос, чем является контроллер? У меня такое ощущение сложилось, что это преобразователь данных для способа ввода через вэб. То есть ответственность контроллера - преобразовать данные из реквеста в форму понятную приложению. Я так понимаю, что приведение типов тоже входит в обязанность контроллера. Ну например приходит поле datetime в виде строки, а контроллер из него должен сделать DateTime объект например

Sergey
20.06.2018
13:07:20
1. мэпим данные на DTO
2. валидируем DTO (можно декоратором над приложением, тут люди любят упарываться во всякие command bus
3. если валидация не прошла - можно или кинуть исключение или реально вернуть какой-то объект где будет поле errors непустое (привет го)
вообще можешь погуглить GRASP controller
контроллер в контексте http приложения это просто адаптер http <-> application. Соответственно для CLI приложения у нас свой адаптер а для xml batch processing свой


Ramil
20.06.2018
13:16:13
Привет, подскажите пожалуйста канал в котором выкладывают книги по программированию.

Artem
20.06.2018
13:16:34
валидировать декоратором над приложением - это любопытно, я бы сам до такого не додумался ;О
То есть сначала валидируем в декораторе, а если свалидировалось - передаём управление декорируемому объекту?
Просто тут сразу возникают вопросы о том, какие значения будут возвращать декоратор и декорируемый. По идее у них же интерфейсы должны быть одинаковые. Тогда декоратор будет возвращать ошибки, а декорируемый результат, а это уже разные интерфейсы. Или я чего-то не понял

Ramil
20.06.2018
13:18:48

Maksim
20.06.2018
13:20:42
все книги по веб разработке - мусор)
годится только для растопки печи)

Ramil
20.06.2018
13:21:02
ты хоть одну прочитал?

Maksim
20.06.2018
13:21:16
нет конечно

Ramil
20.06.2018
13:21:31
ну вот, смотри дальше ютуб

Artem
20.06.2018
13:21:37
по веб разработке
вообще-то я не знаю таких каналов (но это не показатель, я вообще в телеграме 2 дня как зарегистрировался). А так бы, если бы я с нуля начинал, топросто в инете поискал, на рутрекере. Либо попытался какие-то курсы найти

Maksim
20.06.2018
13:21:50
какие дерзкие джуны-то нынче пошли...

Bohdan
20.06.2018
13:22:16

Ihor
20.06.2018
13:22:17

Maksim
20.06.2018
13:22:37

Ihor
20.06.2018
13:23:09
это смотря с какой стороны посмотреть ))

Google

Maksim
20.06.2018
13:23:11
ему надо чёт вроде свой блог за 21 день)

Artem
20.06.2018
13:24:11
боюсь если человек ищет книги по вэб программированию - это даже не джун, а совсем начинающий =\ Это вот я джун (и то только потому, что это php :D )

Ramil
20.06.2018
13:26:24
В книгах как раз очень много полезной инфы.

Maksim
20.06.2018
13:26:37
в нигах по веб разработке полезной инфы нет)
но ты пока не в состоянии понять о чём речь)

Bohdan
20.06.2018
13:27:07
практические книги устаревают через полгода после выхода

Ramil
20.06.2018
13:27:51
И что посоветуете для изучения? Только документацию?
Она всегда актуальна)

Bohdan
20.06.2018
13:28:13
посоветуем учить не веб-разработку, а программирование и инфраструктуру

Maksim
20.06.2018
13:29:08

Ramil
20.06.2018
13:29:58
Есть примеры, сайты, книги, каналы?

Maksim
20.06.2018
13:30:08
ну тебе там выше накинули. Этого на пол года хватит)

Sergey
20.06.2018
13:30:26
ого, рекомендую Александреску для начала, неплохо так
я б посоветовал в качестве базы почитать SICP

Ramil
20.06.2018
13:31:10
Спасибо.

Maksim
20.06.2018
13:31:20
можно его гофом добить)
но вообще, ютубчик - не такой уж и плохой вариант :)
так-то чтиво со старта будет тяжко усваиваться

Ramil
20.06.2018
13:31:41
я на freecodecamp

Maksim
20.06.2018
13:32:58
для пхп в частности можно зандастру взять. Он в целом совсем базовые вещи объясняет вменяемо. Только не надо воспринимать всё, что там написано за чистую монету. так, направление укажет

Eugene
20.06.2018
13:33:25
зандстра для начала это как то мощновато

Google

Eugene
20.06.2018
13:33:33
Котеров?

Maksim
20.06.2018
13:33:43
ну перед зандастрой синтаксис на пхп.нете почитать и ок)

Eugene
20.06.2018
13:34:18
ну вот оч хорошо заходит связка Котеров \Зандстра

Artem
20.06.2018
13:34:27
Именно во время чтения этой книжки я понял, что такое композиция и это взорвало мне мозг :D

Maksim
20.06.2018
13:35:54
чёт не припомню, что бы зандастра там нормально за композицию вещал)

Artem
20.06.2018
13:36:35
он может и не вещал, но там было про стратегию) и вот когда я понял что это такое, я просто офигевал целый день с большими круглыми глазами

Sergey
20.06.2018
13:39:46
Для начала можно взять любую книгу по веб разработке. Там можно потчерпнуть знания из серии "как подключть jQuery", "обработать форму", "отправить мыло". После прочтения можно двигаться в ту сторону куда ентереснее. Собственно во фронт или в бэк. Ну а выбрав направление можно уже и соответсвующую литературу смотреть. Тут уже много накидали вариантов.
Мы джунам (вот прям с нулевыми знаниям) даем ссылки на доки и мелкие таски. Если человек тяготеет к беку, то двигаем в этом направлении, если к фронту, то в соответсвующем. ИМХО, для начала нужно определиться зачем оно нужно это самое программирование и к чему есть способности)

Maksim
20.06.2018
13:40:15
"Там можно потчерпнуть знания из серии "как подключть jQuery", "обработать форму","
та нахуя?)

Sergey
20.06.2018
13:40:38
увидеть к чему у человека есть таланты

Admin
ERROR: S client not available

Sergey
20.06.2018
13:40:45
и что он легче усваивает

Maksim
20.06.2018
13:41:01
талант к подключению jquery?)

Sergey
20.06.2018
13:41:14
для некоторых это сложно)

Bohdan
20.06.2018
13:41:19
киньте в меня ссылкой, в каких случаях instanceof плохо в пхп
а то нахожу только по джаве примеры, где некоторые кейсы лечатся перегрузкой методов

Maksim
20.06.2018
13:41:38

Bohdan
20.06.2018
13:41:51
слышал от кого-то в чате об этом
мой кейс - обработка ивентов
есть мидлвара, ловящая их, есть два гейтвея (синхронный и асинхронный диспетчеры)
сейчас юзается is_subclass_of (ну почти instanceof)

Maksim
20.06.2018
13:43:23
ну стратегия в помощь. а там в supports будет снова запрятан instanceof

Google

Maksim
20.06.2018
13:43:38
так-то ничего плохого нету. Ну прям совсем)
вопрос в другом. Почему у тебя событие знает какое оно (синхронное или асинхронное)
мб у тебя там события - вовсе не события?) а события и хуки?)

Bohdan
20.06.2018
13:58:47
ну фактически асинхронных сейчас нет
это так, замашка на будущее (вижу место для этого в ближайших фичах)
события - в рамках tactician
все как обычно: команда потриггерила события, потом хендлеры событий и так далее
просто сделал так, чтобы события могли уйти в разные гейтвеи
синхронный - просто диспетчер

Maksim
20.06.2018
14:00:51
ну я ничего плохого в instanceof не вижу) моб Сергей чёт накинет, но как по мне - норм)
меня ток идея с разными "типами" событий смущает)

Bohdan
20.06.2018
14:01:35
давай холиварить
хотя

Maksim
20.06.2018
14:02:03
лень)

Bohdan
20.06.2018
14:02:20
ну другой вариант, который вижу - все события синхронны, а где надо - уже кладем в кролика аль куда мессагу

Maksim
20.06.2018
14:02:21
я ж любитель обмазаться басами) у меня нет синхронных событий)

Sergey
20.06.2018
14:18:59
но в php иногда других вариантов нет....

Maksim
20.06.2018
14:19:50
ну вот как раз случай с событиями, о которых выше говорил. мну смущает

Sergey
20.06.2018
14:19:57
для того что бы роутить ивенты я лично ничего плохого в instanceof не вижу

Bohdan
20.06.2018
14:20:04
ну вот вся аргументацию, что я нашел - "если у вас instanceof, кладите логику в класс"

Sergey
20.06.2018
14:20:10
хотя опять же мне кажется это несколько странным

Bohdan
20.06.2018
14:20:20
типа class-specific логика должна относиться к нему

Sergey
20.06.2018
14:20:37
ну мол у меня скорее листенеры разбиты на группы, одни листенеры регаются как синхронные в контексте запроса а другим можно асинхронно

Maksim
20.06.2018
14:20:40
смущает потому, что событие несёт в себе данные о том, как будет обрабатываться

Bohdan
20.06.2018
14:20:41

Sergey
20.06.2018
14:21:00

Maksim
20.06.2018
14:21:05
я бы сделал отдельный роутер по типам