-
Notifications
You must be signed in to change notification settings - Fork 0
Description
есть Application, в котором описана логика, здесь задаем композицию вызова на модулях команд. И есть модули, что реализуют сами команды.
Тогда я бы хотел, что транзакции - это не ещё один модуль, а слой между аппликом и модулями. Когда мы открываем транзакцию, мы не только создаём ресурсы в узком смысле(транзакция к бд), а дублируем в ней модули (без данных), которые провязываем логикой с «базовыми» модулями, где хранятся данные. Если транзакция заканчивается комитом, то мы повторяем команды из транзакции на «базовых» модулях. Тут же и включается лок, что записываться в системе может только одна транзакция единовременно. По окончанию транзакцию с событиями - сохраняем в хранилище.
Проверяем, что следующая транзакция на исполнения, осталось валидной.
Вызов команд на уровне апплика превращается в transaction.exec(Module, Command).
Так же походу потребуется доработка:
- выделить precondition для команд
- Разделить модули на statefull и stateless (тут ещё подумать надо)
- Продумать кейс, когда один модуль лезет в другой мимо транзакции
Так же если транзакцию к бд немного покрутить, то можем реализовать возможность транзакцию «отложить» на пару дней, а потом восстановить и закончить