
Sergey
08.08.2018
16:29:38
symfony/serializer-ом. весьма удобно
даже если у тебя вдруг не 1:1 мэппинг DTO - всегда можно нормалайзер свой зарегать

Anton
08.08.2018
16:30:21
Типа мапишь json или че там прямо на DTO?

Sergey
08.08.2018
16:30:26
да

Google

Anton
08.08.2018
16:30:40
Ясн

Sergey
08.08.2018
16:30:43
если надо не прямо - регаешь свой нормалайзер или даже свой ресолвер

Anton
08.08.2018
16:31:05
А логика прям в доктрин энтитях?

Sergey
08.08.2018
16:31:22
ну вот в примере выше это prooph а не доктрина)
но в целом да
логика в сущностях, доменные ивенты, потом отдельные листенеры тригерят другие операции
там где сложно дергаю сервис
но то что я пока для себя понял - мне не нужна доктрина

Anton
08.08.2018
16:33:05
Prooph это какой-то упрощенный маппер или что?

Sergey
08.08.2018
16:33:23
это такой недо nservicebus
типа хлипенький фреймворк для event sourcing

Anton
08.08.2018
16:33:47
Ясн
И как, все нравится? Какие проблемы наблюдаешь?

Google

Sergey
08.08.2018
16:35:02
с пруфом? но он примитивненький.
много чего приходится доделывать

Anton
08.08.2018
16:35:49
Ну и вообще с твим подходом

Sergey
08.08.2018
16:35:50
но в целом приятнее чем с доктриной. правда юзать пруф для всего тоже не оч выгодно... ну это больше камень в огород стоимости event sourcing-а
у нас только часть сущностей (самое важное) через ES менеджатся. И часть через доктрину.
Ну и вообще с твим подходом
у меня сча самая большая проблема - формирование респонсов. Типа хочу что бы модули могли декларировать штуки и потом верхняя штука по описанию респонса бы все склеивала. что бы контроллер ничего не дергал а лишь возвращал что надо вернуть а уже другие штуки это будут собирать

Anton
08.08.2018
16:39:54
Модули это ивент листенеры?

Sergey
08.08.2018
16:52:56
модули это модули, отдельные части приложения. типа профили юзеров, пациентов, докторов, звонки, встречи, докуметы и т.д.
просто клиенту иногда нужно что-то одно а иногда много чего... и хочется как-то все это делать одним запросом и все это как-то что бы не пересекалось и декларировалось на стороне модуля который инфой владеет
короч... загоны по "респонс как композиция данных"

Anton
08.08.2018
16:53:48
А, я понял
наверное

Sergey
08.08.2018
17:07:10
ну вот у меня те же чувства.... я вроде понимаю чего хочу но как-то не очень)

Anton
08.08.2018
17:10:11
А как тесты на бизнес логику?

Artem
08.08.2018
17:17:45
@fes0r
Насколько я понял про типы наследования - это мюсли самого автора?
https://www.sicpers.info/2018/03/why-inheritance-never-made-any-sense/
Или есть какой-то источник, который стоит почитать на эту тему?

Anton
08.08.2018
17:18:52
А кто автор?

Artem
08.08.2018
17:20:14

Art
08.08.2018
17:42:39
как звучит фраза roadroute? Норм для домена?

handmade
08.08.2018
21:19:40

Google

Vlad
08.08.2018
21:36:25

Art
08.08.2018
22:43:33

Dmitry
09.08.2018
06:39:05
чего так?)
Ну может не плохо-плохо, но как-то непонятно. Что обозначает ваше roadroute. Вот со стороны пытаюсь понять и получается "маршрут дороги" (в общем масло масленое)

Sergei
09.08.2018
06:41:25
дорожний маршрут, если есть маршруты не только по дорогам то норм

Anton
09.08.2018
07:00:39
Хотел вот обсудить такой момент. Если допустим у нас апи и мы берем результат какого-то запроса, может это энтити или дто, сериализуем, отправляем в json. В клиенте десериализуем в какой-то тоже там энтити или дто. И на мой вкус, получается, мы этим самым жестко связали эту энтити в сервере с энтити в клиенте. Кто-то изменит поле в сервере и клиент отвалится, а способа это проверить в большом проекте может и не быть надежного

Bohdan
09.08.2018
07:01:10
json schema

Anton
09.08.2018
07:02:21
Даже если есть, ты изменишь энтити и где-то апи уже не будет соответствовать схеме
И если ты не знаешь что оно там где-то сериализуется, то и не посмотришь

Maksim
09.08.2018
07:03:18
тесты для слабаков

Anton
09.08.2018
07:03:34
Да
Ну тесты немного помогают конечно тут

Maksim
09.08.2018
07:04:22
норм) чем больше таких деятелей, тем выше зарплата)
какую проблему пытаешься решить? что контракты у двух частей системы должны быть совместимыми?)

Maksim
09.08.2018
07:04:35
не немного, а полностью

Anton
09.08.2018
07:06:03
Очень просто у тебя все :)

Maksim
09.08.2018
07:06:56
у меня 4 сотни "дтошек", которыми взаимодействют 3 разных языка. не говори мне про простоту в сраной апишечке
любой дымовой тест полностью решает твою проблему

Anton
09.08.2018
07:09:55
Конечно же на любую проблему в программировании есть один однозначный и правильный ответ и нечего тут обсуждать

Maksim
09.08.2018
07:10:35
обсуждать что?) что ты не в курсе как построить 2 одинаковых контракта? @thatside выше накинул. Никаких проблем

Sergey
09.08.2018
07:11:58

Anton
09.08.2018
07:12:15
Я пока что остался непонят в этом чате

Google

Sergey
09.08.2018
07:12:23

Maksim
09.08.2018
07:12:36

Sergey
09.08.2018
07:12:51

Anton
09.08.2018
07:13:53
Я веду к тому, что сериализация делает неявную связь между структурой DTO (или энтити, у кого там как) и API, а соответственно и клиентом

Sergey
09.08.2018
07:14:20
ммм.... я бы не сказал что она такая уж неявная

Maksim
09.08.2018
07:14:39
дай ему мысль раскрыть)
там дтошки и сущности - в общем-то одно и то же.
да ещё и связь неявная (хоть и ногами забита, но типа неявная)

Sergey
09.08.2018
07:15:08
ну то есть, ты эскпоузишь какую-то модель данных, и клиентский код на эту модель данных завязан. Сериализация это лишь промежуточный этап для того что бы данные доставить. Ты можешь использовать что-то с жесткой схемой (grpc, thrift и прочие messagepack)
если ты экспоузишь модель данных сущности (то есть у тебя одна и та же модель данных используется и на чтение и на запись в этом случае) - то... да, ситуация еще более усугубляется

Admin
ERROR: S client not available

Anton
09.08.2018
07:17:12
По хорошему нужно делать отдельные DTO для каждой апи и мапить твои модели на них
так?

Sergey
09.08.2018
07:17:25
и да и нет

Maksim
09.08.2018
07:17:27
так

Sergey
09.08.2018
07:18:44
ну то есть ДА в том плане что структура данных для UI должна быть жестко определена, что бы иметь возможность далее использовать ее для контрактов и проще проверять обратную совместимость (и ее поддерживать) и НЕТ в том плане что это может быть не просто класс
(опять же это мои мечты о том что бы описывать респонсы как композицию данных, а для этого мне DTO-ки очень мешают но я всеравно хочу иметь схему)

Anton
09.08.2018
07:20:00
То же самое, если не API а сервер сайд рендеринг, объекты которые передаются на вью не очень хорошо если это прямо твои бизнес энтити, а надо отдельные делать и на них мапить

Sergey
09.08.2018
07:20:10
любой клиентский код который потребляет какие-то структуры данных, можно даже не ограничиваться UI-ем

Maksim
09.08.2018
07:21:13
но опять-таки, это не решает проблему того, что в 1 месте dto ошку исправили, а в другой части системы нет - всё летит фпесту. И, да, тут тебе поможет либо одинаковая схема для обоих частей (чёт типо xsd, например), либо тесты.

Sergey
09.08.2018
07:21:21
дальше идет сравнение стоимости этого дела (а это делать всегда и везде дорого) и профита который ты получаешь. Риски (как часто меняется, насколько легко определить нарушение обратной совместимости)...

Google

Anton
09.08.2018
07:21:23
А как вы мапите свои бизнес энтити на эти вью dto объекты?

Sergey
09.08.2018
07:21:37
не вижу смысла в read-only операциях вообще сущности юзать
+ у меня есть возможность делать проекции по стриму доменных ивентов, но не для всего увы

Anton
09.08.2018
07:23:54
но опять-таки, это не решает проблему того, что в 1 месте dto ошку исправили, а в другой части системы нет - всё летит фпесту. И, да, тут тебе поможет либо одинаковая схема для обоих частей (чёт типо xsd, например), либо тесты.
Впринципе, если у тебя ДТО чисто для одного апи ответа, ты понимаешь, что если ты его поменяешь - поменяется АПИ ответ, я думаю

Sergey
09.08.2018
07:24:34
дальше есть вопрос - если DTO используются в одном месте, инстанцируются в одном месте - надо ли делать для этого отдельные структуры или можно скрестить это дело с мэппером если есть возможность типы отследить)))
но это опять же мои загоны

Anton
09.08.2018
07:27:00
А если скрестить с мэппером, опять появятся неявные зависимости, или нет?
Что вообще это значит, скрестить с мэппером

Maksim
09.08.2018
07:27:15
у меня одна и та же дтошка есть в 2х разных приложениях. Она сериализуется в 1 месте и десериализуется в тот же объект в другом.
просто, понятно, схема соблюдена :)

Sergey
09.08.2018
07:29:07

Maksim
09.08.2018
07:29:16
можешь посмотреть какой-нить протобаф или аналоги. Будет небольшое представление о передачи вполне формализованных вещей

Sergey
09.08.2018
07:29:45
Тоже что бы убедиться что клиенту не станет плохо) но пока это все влажные мечты
Я просто ленюсь переписать его так что бы оно под меня было

Dmitry
09.08.2018
07:38:47
У меня такой вопрос, у меня есть билдер пользователя системы, который собирает данные с реквеста, базы, кук и т.д., который я пользую уже в разных частях системы. Соответствественно, сейчас через DI я внедряю VisitorBuilderInteface и уже в методе пишу detect() и получаю пользователя. Стоит ли запихивать создание этого посетителя в DIC...

Maksim
09.08.2018
07:41:49
нет

Roman
09.08.2018
07:43:41

Dmitry
09.08.2018
07:43:47