Size: a a a

2021 March 24

VM

Volodymyr Melko in PHP
Константин Грачев
Не оч понятно есть ли в этом смысл. ИД это же как раз то что свободно бегает по контекстам.
ИД лежащие в своих контекстах на уровне импортов дают ощущение что все со всеми связаны.
Возможно я смотрю не туда куда надо смотреть)
вот не уверен, что айдишки должны бегать по контекстах, скорей они должны мапиться на соотвествующие классы в другом контексте, или даже на примитивы, если они там юзаются просто для отображения
источник

КГ

Константин Грачев... in PHP
Volodymyr Melko
вот не уверен, что айдишки должны бегать по контекстах, скорей они должны мапиться на соотвествующие классы в другом контексте, или даже на примитивы, если они там юзаются просто для отображения
всмысле. Мне условный UserId надо в каждом контексте сделать и при передаче из одного в другой надо из User/UserId сделать Product/UserId ?
источник

SP

Sergey Protko in PHP
Константин Грачев
всмысле. Мне условный UserId надо в каждом контексте сделать и при передаче из одного в другой надо из User/UserId сделать Product/UserId ?
Это уже излишние загоны но в целом да :)
источник

VC

Vladimir Chernyshev in PHP
Sergey Protko
Это уже излишние загоны но в целом да :)
+1
источник

VC

Vladimir Chernyshev in PHP
или shared kernel технический
источник

SP

Sergey Protko in PHP
Ну или язык со структурным тайпингом :)
источник

VM

Volodymyr Melko in PHP
Для одного контекста данные полученные из другого ничем не отличаются от данных полученных от кастомера или сторонней системы. Ты же реквесты / респонсы мапишь на свои структурки?
По хорошему, в контексте ты описываешь интерфейс, например,
getUserInfo(int $id): UserInfo
При этом UserInfo это структурка этого же контекста.
В инфраструктуре своего контекста делаешь адаптер, который маппит ответ какого-то юзер контекста на эту структуру.

Надо ли тебе UserId прямо как VO внутри этой структуры? Зачем? Ну если надо - пишешь свой и в адаптере респонс мапишь на свою внутреннюю VOху
источник

VM

Volodymyr Melko in PHP
Надо будет, адаптер поменяешь с вызова какого-то метода в сервисе на зттп запрос, или вычитку из шареного редиса или ещё какая дурь в голову придет, а вся бизнес-логика завязана только на внутренние классы контекста
источник

VM

Volodymyr Melko in PHP
Но по моему опыту хватает плоских ДТО, с примитивами в других контекстах
источник

SP

Sergey Protko in PHP
Volodymyr Melko
Для одного контекста данные полученные из другого ничем не отличаются от данных полученных от кастомера или сторонней системы. Ты же реквесты / респонсы мапишь на свои структурки?
По хорошему, в контексте ты описываешь интерфейс, например,
getUserInfo(int $id): UserInfo
При этом UserInfo это структурка этого же контекста.
В инфраструктуре своего контекста делаешь адаптер, который маппит ответ какого-то юзер контекста на эту структуру.

Надо ли тебе UserId прямо как VO внутри этой структуры? Зачем? Ну если надо - пишешь свой и в адаптере респонс мапишь на свою внутреннюю VOху
Там есть одна опасность - у тебя вот в сообщении ты общаешь на все данные

В целом это все не важно. Важно что между контекста и количество взаимодействий и "что ты передаешь" надо ограничивать. Меньше лучше.

Что до типов - нет ничего плохого в том что бы был общий модуль с контрактами если стэк технологий позволяет.

А в целом можно мысленно представить что все контексты - независимые микросервисы и все написаны на разных языках. Просто что бы было проще представить себе весь этот треш
источник

SP

Sergey Protko in PHP
Лучше больше загоняться не по тому на какие объекты ты данные мэпишь когда их между контекста и передаешь а про то какие вообще данные
источник

SP

Sergey Protko in PHP
Volodymyr Melko
Но по моему опыту хватает плоских ДТО, с примитивами в других контекстах
Все так. Дальше все про выразительность языка и тулов
источник

VM

Volodymyr Melko in PHP
Sergey Protko
Там есть одна опасность - у тебя вот в сообщении ты общаешь на все данные

В целом это все не важно. Важно что между контекста и количество взаимодействий и "что ты передаешь" надо ограничивать. Меньше лучше.

Что до типов - нет ничего плохого в том что бы был общий модуль с контрактами если стэк технологий позволяет.

А в целом можно мысленно представить что все контексты - независимые микросервисы и все написаны на разных языках. Просто что бы было проще представить себе весь этот треш
Этот общий технический шаред кернел во первых начинает пухнуть безбожно, а во вторых становится адской проблемой в ситуациях типа "а вот тут задачка подъехала, но на пхп мы её не решим, нужно брать ноду/го/джавку/етс
И приходится дублировать этот шаред кернел в разные языки, держать из синхронными и вот это вот все
источник

VM

Volodymyr Melko in PHP
Sergey Protko
Лучше больше загоняться не по тому на какие объекты ты данные мэпишь когда их между контекста и передаешь а про то какие вообще данные
Ну и да, если в каждом контексте описывать свои структурки, то можно здоровски ограничивать данные. В каком-то контексте юзер будет просто одним полем с айдишкой, где-то айдишка и мыло
источник

AM

Artem Molotov in PHP
Volodymyr Melko
Этот общий технический шаред кернел во первых начинает пухнуть безбожно, а во вторых становится адской проблемой в ситуациях типа "а вот тут задачка подъехала, но на пхп мы её не решим, нужно брать ноду/го/джавку/етс
И приходится дублировать этот шаред кернел в разные языки, держать из синхронными и вот это вот все
> И приходится дублировать этот шаред кернел в разные языки, держать из синхронными и вот это вот все

А разве если делать для каждого контекста отдельную структуру, то это не приходиться делать? В смысле, мол при изменении контракта нужно и маппер/нормалайзер допиливать.
источник

VM

Volodymyr Melko in PHP
Artem Molotov
> И приходится дублировать этот шаред кернел в разные языки, держать из синхронными и вот это вот все

А разве если делать для каждого контекста отдельную структуру, то это не приходиться делать? В смысле, мол при изменении контракта нужно и маппер/нормалайзер допиливать.
Не делай breaking changes по возможности. Если в респонс добавилось новое поле, но тебе оно не нужно в другом контексте, то и не мапь его.

Ну и чутка магии не помешает. Полно готовых либ которые один объект на другой сами замапят
источник

AM

Artem Molotov in PHP
Volodymyr Melko
Не делай breaking changes по возможности. Если в респонс добавилось новое поле, но тебе оно не нужно в другом контексте, то и не мапь его.

Ну и чутка магии не помешает. Полно готовых либ которые один объект на другой сами замапят
Если их не делать, то и с синхронизацией в других языках попроще будет. Но, в любом случае, один раз поправить маппер проще, чем править в множестве мест, где ранее "общая" структура использовалась
источник

SP

Sergey Protko in PHP
Volodymyr Melko
Ну и да, если в каждом контексте описывать свои структурки, то можно здоровски ограничивать данные. В каком-то контексте юзер будет просто одним полем с айдишкой, где-то айдишка и мыло
в целом хорошей идеей будет просто сделать процесс который максимально усложнит шаринг данных_)
источник

SP

Sergey Protko in PHP
тип что бы 10 раз надо было подумать перед тем как в это ввязываться)
источник

VM

Volodymyr Melko in PHP
Sergey Protko
тип что бы 10 раз надо было подумать перед тем как в это ввязываться)
это да =)
источник