
Sergey
07.07.2018
08:30:49
тогда из еще можно сгруппировать по пересечению зон ответственности вместе
на маленьких проектах как бы плевать, а если у тебя хотя бы пара сотен экшенов уже не так удобно

Google

Sergey
07.07.2018
08:35:08
invokable класс естественно

Sergey
07.07.2018
08:35:22
короч я так подумал - лучше зайти к этому вопросу с другой стороны. Как у тебя выглядит Domain в терминах ADR?

Sergey
07.07.2018
08:36:02
если совсем в общем - его зона ответственности - подготовка данных, которые будут выведены
если более частно - кошмарно, думаю надо еще почитать посмотреть про сервисы, вполне возможно чего то подобного мне не хватает в доменах

Sergey
07.07.2018
08:37:35
но пока не уверен
возможно опять проблема с терминологией
если у тебя есть возможность псевдокодом описать код экшена какого-то, например - регистрация юзера. было бы клево
типа name, email, password

Sergey
07.07.2018
08:43:23
хм...
должно выглядеть примерно как domain->addUser(request);
так стоп не совсем

Google

Sergey
07.07.2018
08:45:35
return responder->__invoke(domain->addUser(request));

Sergey
07.07.2018
08:57:32

Sergey
07.07.2018
09:04:46
в данный момент да

Sergey
07.07.2018
09:05:02
ну значит ты не разобрался с ADR

Sergey
07.07.2018
09:05:46
да я понимаю, что не должен
но сейчас выглядит так

Sergey
07.07.2018
09:06:22
да я понимаю, что не должен
ну то есть вообще никакого разделения ответственности ты тут не имеешь. Это то же самое что json_encode($domain->addUser($request);

Sergey
07.07.2018
09:07:44
по логике должно быть примерно так return responder->invoke(domain->addUser(name, email, password));
вот насчет 2х ответственностей я подохреваю что тут проблема
а responder обрабатывает пришедшие данные и подготоваливает response
заголовки, тело страницы и т.д.

Sergey
07.07.2018
09:10:17
могу ли я скормить айдишку респондеру что бы тот сгенерил респонс и он сам знал что откуда доставать?
это ж по сути тоже преобразование

Sergey
07.07.2018
09:10:37
нет

Sergey
07.07.2018
09:10:43
то есть. если мне нужен json - мне выходит что не нужны респондеры?
я ж могу тупо сделать return $this->json($domain->addUser(...$request));

Sergey
07.07.2018
09:11:02
респондеры имеют следующий заголовок __invoke(payload)

Sergey
07.07.2018
09:11:54
респондеры имеют следующий заголовок __invoke(payload)
предположим что у нас страничка, где надо отображать всякий профиль пользователя сверху, какие-то блоки с полезной инфой и т.д. Домен должен на каждый запрос все эти данные доставать или респондер может сам куда-то сходить?

Google

Sergey
07.07.2018
09:12:25
это зона ответственности домена

Sergey
07.07.2018
09:13:13
в каждом, Карл
то есть связанность системы взлетает до небес

Sergey
07.07.2018
09:13:30
зачем?

Sergey
07.07.2018
09:13:43
ну потому что надо что бы домен предоставил всю инфу которая будет на страничке, с твоих слов

Sergey
07.07.2018
09:13:57
именно
но ты же не всегда всю страницу тянешь?

Sergey
07.07.2018
09:14:05
но ты же не всегда всю страницу тянешь?
предположим что у меня нет фэнси ajax-ов и т.д. и мы говорим о классическом WEB (ибо там где фэнси SPA мне не нужен респондер ибо у меня это будет просто json_encode по твоей логкие)

Sergey
07.07.2018
09:15:54
для веба да, но для классического веба по другому никак
если конечно не пользвоаться iframe

Sergey
07.07.2018
09:17:16
кроме того иногда не json encode а все же отрендереный кусок страницы

Sergey
07.07.2018
09:17:23
ох сколько нам открытий чудных....

Sergey
07.07.2018
09:17:51
ну не отправлять же сразу все шаблоны клиенту?

Sergey
07.07.2018
09:18:03
> по другому никак
Что ты знаешь о HMVC? компонентные подходы? UI как композиция элементов? каждый со своим провайдером данных и т.д.?

Sergey
07.07.2018
09:18:53
иерархическая система MVC, триады каждая со своей зоной ответственности

Sergey
07.07.2018
09:19:29
короч моя основная притензия к твоей интерпритации ADR что она не только бесполезная но вредная, ибо никакого разделения ответственности у тебя по итогу нет.
вообще никакого

Google

Sergey
07.07.2018
09:19:49
даже pmjones не такую вредную хрень предлагает

Sergey
07.07.2018
09:19:56
с чего бы?

Sergey
07.07.2018
09:20:10
ну потому что то что ты описал отличается от того что он пишет в описании ADR
и закончим тем какой объем связанности порадит такая херня

Sergey
07.07.2018
09:21:02
никакой

Sergey
07.07.2018
09:21:15
мой тебе совет - забудь о MVC, ADR и т.д.
и лучше разберись с тем что такое связанность и с идеей "Dependency as code smell"
композиция и агрегация там, ну и все такое. Какие есть трюки что бы уменьшать количество зависимостей

Sergey
07.07.2018
09:22:27
я знаю что такое связанность

Admin
ERROR: S client not available

Sergey
07.07.2018
09:22:32
ну что-то не похоже

Artem
07.07.2018
10:24:39
пилю тестовое задание и думаю "А нафига мне маппить данные полученные из запросов в объекты, если мне их только юзеру передать?". Типа может просто массив зафигачить и бог с ним? Всё равно никакого поведения у объектов не будет.

Bohdan
07.07.2018
10:27:50
ну DTO - это массивчик на стероидах
мне сейчас для них только readonly пропертей не хватает...
можно было бы поиграться с __get, но не хочется терять автокомплит

Sergey
07.07.2018
10:28:41
по сути зачем придумали DTO - потому что часто одна и та же структура нужна в двух местах, и в языках где для выражения структур данных у тебя есть только классы, как-то так пошло что все пладят эти классы.
если бы в php приложении структура данных выплевывалась клиенту строго в одном месте - то и обычный массивчик неплохо подойдет для решения проблемы
поскольку у нас конструирование и описание структуры будет строго в одном месте

Boris
07.07.2018
10:30:16
ну в массиве при получении его ты ж не знаешь наверняка какие там есть элементы и тд
чтобы не делать !empty()

Google

Boris
07.07.2018
10:30:30
на 10 мест

Sergey
07.07.2018
10:30:50
и тебе не надо знать структуру этого DTO кроме как в месте, где ты его конструируешь

Boris
07.07.2018
10:31:07
по сути ДТО это валидация при создании , в массиве при получении

Sergey
07.07.2018
10:31:23
это не помогает

Boris
07.07.2018
10:31:26
просто и то и то надо юзать с умом, а то как говорится дай дураку стеклянный .. он и его разобьет))

Artem
07.07.2018
10:31:56
ну DTO - это массивчик на стероидах
просто получается, что репозиторий (а логично ли его называть репозиторием, если он возвращает только view-model?) возвращает то же самое, что application service, который его вызывает =\

Sergey
07.07.2018
10:31:56

Boris
07.07.2018
10:32:10
в самом сервисе или делаем валидацию или перекладываем ее на дто конструктор

Sergey
07.07.2018
10:32:32
а если на выход - есть возможность сделать так что структура нам снаружи и не особо интересна (хотя на самом деле интересна, но это можно статическими анализаторами вытащить)

Boris
07.07.2018
10:33:14
да, но если условно на вход был массив , где обязательные 3 элекмента, то как вариант можно передать их отдельными параметрами, а не внутри массива

Bohdan
07.07.2018
10:33:17

Artem
07.07.2018
10:33:39

Bohdan
07.07.2018
10:34:26
ну здесь вопрос в том, уверен ли ты в том, что получишь то, что тебе нужно

Sergey
07.07.2018
10:34:34
потому я и говорю что в условиях php у тебя есть только классы. А была бы возможность описать схему массивчика, его тип, то ты бы не делал классы для DTO)

Artem
07.07.2018
10:35:17

Bohdan
07.07.2018
10:35:22
да
и хочешь ли ты отдать проверку этого клиенту