Size: a a a

Software Design/Architecture/Zen

2021 July 28

ПГ

Павел Г. in Software Design/Architecture/Zen
Как в вашей саге будет обрабатываться такой кейс: сервисзаказа подсвердил заказ, но потом сервисДоставки выдал ошибку?
Я вижу два варианта: 1) в саге обертка БД транзакцией 2) В  саге после ошибки над доставкой идет обращение к сервисуЗаказа чтобы отменить прошлое действие.
источник

RS

Rus Skazkin 🐘 in Software Design/Architecture/Zen
для чего в company и team userId?
источник

ИЛ

Иван Лещёв in Software Design/Architecture/Zen
Не является. Юзерроли отдельно, а наличие для них данных отдельно.
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
я так понял вы про https://blog.devart.com/table-per-type-vs-table-per-hierarchy-inheritance.html
есть и другие варианты, думаю проще погуглить как из них выбирать
если коротко, то важно как вы будете по ним искать, а точнее будут ли разные типы в одном контексте использоваться обобщенно, для пользователей это чаще всего не так и вы хотите table per type
источник

ДС

Дмитрий Солнцев... in Software Design/Architecture/Zen
Потому что юзер может быть либо company либо team
источник

ИЛ

Иван Лещёв in Software Design/Architecture/Zen
Данных у пользователя может ещё не быть. Или наоборот, роль может быть временно выключена.
источник

ДС

Дмитрий Солнцев... in Software Design/Architecture/Zen
У меня создается сразу нужный тип юзера. Либо company либо team либо какой-то другой
источник

ДС

Дмитрий Солнцев... in Software Design/Architecture/Zen
Спасибо, почитаю
источник

ИЛ

Иван Лещёв in Software Design/Architecture/Zen
Ну может быть в некоторых архитектурах прокатит.
Но в целом может не прокатить.
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
Всегда нужно уточнять у бизнеса, как нужно обрабатывать такие ситуации.
Допустим вариант 1. отменять все нахер и слать юзера с ошибкой
Тогда нужно, чтобы сервис заказа умел отменять только что подтвержденный заказ.
т.е. он должен понимать две команды: подтвердить заказ и отменить только что подтвержденный заказ.

Есть вариант 2, попытаться повторить. Наиболее популярный.
Сценарий:
1. отправить команду подтвердить заказ
2. отправить команду в сервис доставки
3. получить оба ивента что все ок. и тогда завершить сагу новым ивентом, что заказ "подтвержден окончательно"
4. если какой-нибудь из сервисов отказал, то ждем N милисекунд и повторяем
5. если все отвалилось по техническим причинам, то юзеру следует сказать, что ваш заказ сохранен, но доставка еще не известна.
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
https://www.entityframeworktutorial.net/code-first/inheritance-strategy-in-code-first.aspx
вот тут нормально написано с плюсами и минусами подходов
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
Но это лишь варианты решения кокторые пришли на ум. их реально очень много
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
Транзакции ко всяким базам данных должны жить только в рамках 1-й команды к аггрегату или чему-то еще.
источник

ДС

Дмитрий Солнцев... in Software Design/Architecture/Zen
Те по сути нормализация не Священный Грааль? Надо отталкиваться от потребностей?
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
вытягивать их на уровень саг -- это такое себе. но впринципе допустимо, главное чтобы это было красиво скрыто за понятным интерфейсом. т.е. сначала нужно этот самый интерфейс написать. В рамках какого-нибудь UnitOfWork
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
Спасибо за развернутость! Т.е. так или иначе это конпенсационные действия, но уже в зависимости от бизнес логики.  Транзакцией БД поддерживать атомарность перехода состояний нескольких агрегатов - не хорошо.
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
конечно
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
Не хорошо, но допустимо 😅
источник

ИЛ

Иван Лещёв in Software Design/Architecture/Zen
Серебряных пуль нет, есть обычные, которые надо заряжать и делать 4 выстрела в минуту во время дождя.
источник

AL

Anton Lakotka in Software Design/Architecture/Zen
не хорошо, но возможно. сложно объяснить на пальцах
источник