Size: a a a

Software Design/Architecture/Zen

2021 May 11

N

Nikita in Software Design/Architecture/Zen
я тоже стараюсь делать все как можно проще без сотни абстракций, и мне очень логично делать так:

- репозитории - абстракция над sql бд, с ним связаны все операции чтения/записи в бд
- сервисы /usecases - сама бизнес логика
- views/controllers - понятно что

пока что остановился на таком выборе без усложнений
источник

SP

Sergey Protko in Software Design/Architecture/Zen
у меня просто между сервисами и "репозиториями" (которые можно разделить) еще агрегаты есть и большая часть важной бизнес логики там сидит. А в "юзкейсах" чисто оркестрация
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну и это все чисто для write model. для рид моделек мне вполне норм если будет некий сервис который на выход возвращает структурку. И если структурка в json response преобразуетсяс мидлварвами, а http запросы можно конвертировать на вход этому сервису, то он может быть и контроллером и "репозиторием" и чем хочешь. Без какого либо разделения
источник

SP

Sergey Protko in Software Design/Architecture/Zen
всеравно эту херь только с базой покрывать
источник

N

Nikita in Software Design/Architecture/Zen
это мне сложновато пока, довольствуюсь подходом выше пока что))

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

N

Nikita in Software Design/Architecture/Zen
Переслано от Sergey Protko
у меня просто между сервисами и "репозиториями" (которые можно разделить) еще агрегаты есть и большая часть важной бизнес логики там сидит. А в "юзкейсах" чисто оркестрация
источник

N

Nikita in Software Design/Architecture/Zen
Переслано от Sergey Protko
ну и это все чисто для write model. для рид моделек мне вполне норм если будет некий сервис который на выход возвращает структурку. И если структурка в json response преобразуетсяс мидлварвами, а http запросы можно конвертировать на вход этому сервису, то он может быть и контроллером и "репозиторием" и чем хочешь. Без какого либо разделения
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну вот я "стаблю" все методы всех зависимостей. пракило такое. которое часто люди игнорируют а потом кричат что с мок фреймворками неудобно и хрупкие тесты.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
+ отдельно кафй когда сайд эффекты void - их не надо определять явно в стабах/моках.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
потому мне оч больно когда есть некий "репозиторий" и у него скажем 10 методов, 2 из которых юзаются везде а остальные 8 в одном или двух местах максимум
источник

k

knopkod4v in Software Design/Architecture/Zen
только у меня был бы
findActiveAllowedForTariffNotExpiredPromocode
если надо знать причину почему промокод не подходит - удобнее это делать на смапленных данных.
Ну либо да, маппить на модель для чтения и это уже будет какой-то гейтвей,а  не репо. Наверное это лучший вариант 🤔
источник

k

knopkod4v in Software Design/Architecture/Zen
а модель для чтения уже прокидывать через дабл-диспатч в заказ при применении 🤔
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
1. Зачислить денег на счет
2. Перевести деньги со счета на счет (снять с одного, зачислить на другой)
3. Оплатить товар (денежный перевод плюс резервирование товара плюс передача заказа в отдел доставки)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
я оч давно не работал с скидками и промокодами потому мне оч сложно комментировать че там как делать и где там какие правила да инварианты.
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
что из этого юзкейс, сага или еще какая хрень?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
юзкейс ~= операция ~= бизнес транзакция. Она может состоять из одной или более логических транзакций. Если бизнес транзакция затрагивает несколько экторов - то можно говорить о сагах (распределенные транзакции)
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
а эктор как пользователь продукта или эктор как часть дизайна кода?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
дальше это вопрос как ты дробишь логические транзакции. В простых кейсах когда нет колаборации или когда ты там локами обмаываешься - можно в "юзкейсе" просто втупую подряд вызовы записать и вжух все логические транзакции в одном месте описаны. Удобно. Особенно кггда можно все это одной транзакцией в базе закрыть.

А можно после каждой логической транзакции кидать ивент и запускать следующую логическую транзакцию. Это уже можно сагами описывать и компенсирующие действия делать. Это когда у тебя более сложные взаимодействия, зависимости и более жесткие требования по времени проведения операции для пользователя. Мол eventual consistency и вот это все
источник

SP

Sergey Protko in Software Design/Architecture/Zen
но условно говоря должен быть кто-то кто в конце скажет "заказ оформлен". И вот это - юзкейс.
источник

N

Nikita in Software Design/Architecture/Zen
а вот например "просмотреть историю заказов за день" - это юзкейс или просто метод в том же репо? ведь логик почти нету, по сути тупо sql запрос
источник