Size: a a a

Saint P Ruby Community

2020 July 01

m

max in Saint P Ruby Community
тем что бизнес-логика - это бизнес-логика, она не всегда связана 1-к-1 с моделями
а АктивРекорд это как раз шаблон который удобно применять когда связь 1-к-1, иначе - боль
источник

m

max in Saint P Ruby Community
Cucumba Morozov
это не то чтоб плохо, просто в очень специфичной парадигме. непонятно, зачем рельса тогда
вот именно. в какой-то момент жизни проекта приходишь к пониманию что рельса уже начинает мешаться. хотя на старте помогала. но поздно, никто не собирается все переделывать
источник

CM

Cucumba Morozov in Saint P Ruby Community
у меня так-то туннельное зрение и я кроме сервисов ничего не видел довольно долгое время. но у меня рельсы всегда мало было. щас рельсы много, и я как-то не вижу, чтобы они были суперполезными.

если в разных контекстах юзать разные сущности для одной и той же связи (т.е. Billing::User и HR::User это разное, даже если в одной таблице), то сервисы кажутся и ненужными
источник

IN

Ivan Nemytchenko in Saint P Ruby Community
https://kellysutton.com/2018/01/15/rails-callbacks-flatten-layered-architecture.html - хорошая статья c описанием проблематики. Вот эта проблема с Flatten Layered Architecture никуда не уходит если вы все просто тупо переносите в сервисы.
источник

CM

Cucumba Morozov in Saint P Ruby Community
ну я вот знаю людей, кто так не чувствует, т.к. рельса всё ещё даёт много плюшек, от которых нет смысла отказываться. сервисы при этом юзают

всякие рансаки, активадмины и прочие блага «воткнул и работает» не дают слезть с иглы
источник

AD

Anton Davydov in Saint P Ruby Community
Cucumba Morozov
у меня так-то туннельное зрение и я кроме сервисов ничего не видел довольно долгое время. но у меня рельсы всегда мало было. щас рельсы много, и я как-то не вижу, чтобы они были суперполезными.

если в разных контекстах юзать разные сущности для одной и той же связи (т.е. Billing::User и HR::User это разное, даже если в одной таблице), то сервисы кажутся и ненужными
я думаю тут проблема больше в том, как использовать сервисы и как на них смотреть
источник

AD

Anton Davydov in Saint P Ruby Community
я что-то дошел до странной штуки и пока не могу понять, хорошо это или нет

в целом - идея в том, что у каждого домена есть свои C/Q, которые вызываются из транспорта. при этом транспорт может чейнить разные команды из разных доменов, главное контракты не нарушать
источник

IN

Ivan Nemytchenko in Saint P Ruby Community
Anton Davydov
я что-то дошел до странной штуки и пока не могу понять, хорошо это или нет

в целом - идея в том, что у каждого домена есть свои C/Q, которые вызываются из транспорта. при этом транспорт может чейнить разные команды из разных доменов, главное контракты не нарушать
Звучит непросто
источник

CM

Cucumba Morozov in Saint P Ruby Community
а как чейнить, если юзер в биллинге и юзер в админке это разные юзеры?

какой-то маппинг специальный?

или тут нужны другие понятия?
источник

IN

Ivan Nemytchenko in Saint P Ruby Community
Cucumba Morozov
а как чейнить, если юзер в биллинге и юзер в админке это разные юзеры?

какой-то маппинг специальный?

или тут нужны другие понятия?
юзер в админке - это user.admin, а в биллинге user.buyer
источник

AD

Anton Davydov in Saint P Ruby Community
Ivan Nemytchenko
Звучит непросто
ну в целом да, это о том, что транспорт сам решает что и как ему вызывать и в каком порядке
источник

AD

Anton Davydov in Saint P Ruby Community
Cucumba Morozov
а как чейнить, если юзер в биллинге и юзер в админке это разные юзеры?

какой-то маппинг специальный?

или тут нужны другие понятия?
другие понятия, мы же не про энтити говорим, а про команды или квери. если у тебя две команды из двух доменов нужны для бизнес флоу (и нельзя сделать их асинхронно) - ты можешь их вызвать из транспорта и не париться
источник

AD

Anton Davydov in Saint P Ruby Community
т.е. идея как BFF или как GQL gateway для сервисов, где сервисы - изолированные части твоего приложения, а “гейтвей” будет твоим транспортом
источник

AD

Anton Davydov in Saint P Ruby Community
простой пример: у тебя аунтификация есть и какая-то логика за ней. по идее, тебе не мешают сделать 2 изолированных “домена” в монолите, а потом их зачейнить в транспорте
источник

CM

Cucumba Morozov in Saint P Ruby Community
Ivan Nemytchenko
юзер в админке - это user.admin, а в биллинге user.buyer
А если у меня есть уборщица в найме и уборщица в заказе? И уборщица в выплатах. И ещё в пяти разных контекстах.

Еще неймспейсинг?
источник

CM

Cucumba Morozov in Saint P Ruby Community
Anton Davydov
другие понятия, мы же не про энтити говорим, а про команды или квери. если у тебя две команды из двух доменов нужны для бизнес флоу (и нельзя сделать их асинхронно) - ты можешь их вызвать из транспорта и не париться
Интересно пощупать
источник

AD

Anton Davydov in Saint P Ruby Community
Cucumba Morozov
Интересно пощупать
источник

AD

Anton Davydov in Saint P Ruby Community
но я не скажу, что мне нравится как я разбил "домены"
источник

AD

Anton Davydov in Saint P Ruby Community
хотя в целом пока все устраивает
источник

AD

Anton Davydov in Saint P Ruby Community
(один фиг забил на проект, кек)
источник