ребят, в тему агрегатов
есть пеймент сервис, где есть набор сущностей
payment_intent,
payment
balance_transaction
wallet
reservation
пеймент интент это способ контролировать намерения об оплате и гарантия того, что мы не можем оплатить что-то более одного раза. + у интента есть определенная логика и правила переходов из различных состояний
при завершении пеймент интента необходимо создавать пеймент, который может быть ассоциирован с балансной транзакцией юзера (что-то, что аффектит внутренний баланс), а может и не быть ассоциировано с ней (списание проводилось в обход внутреннего кошелька напрямую с карты)
а дальше начинается самое интересное
пеймент может просто быть (в случае покупки внутренних товаров), а может быть направлен другому юзеру, если покупался его продукт, к-ый предоставлен на нашей платформе. в таком случае он ассоциирован с резервацией (что-то, что говорит, сколько денег нужно захолдить у юзера перед передачей другому юзеру), и только после предоставления услуги со стороны продавца к резервации добавляется балансная транзакция, к-ая аффектит кошелек продавца (говорит, что в рамках резервации был проведен трансфер другому юзеру)
и вот тут вопрос, как организовать агрегаты. не хочется делать какой-то один агрегат рут, т.к. тогда логика может быть сверх жирной и сами агрегаты будут крупными. + проходящие бизнес процессы намекают, что связать прям всё в одну кучу будет не оч хорошей идеей
собственно, что пришло в голову:
интент является агрегатом и содержит логику, к-ая отвечает только за него. т.е. это различные правила переходов из состояния в состояние + публикация различных событий. когда переходим в состояние completed, то через eventual consistency создаем пеймент
пеймент тоже является агрегатом, и там находится вся логика по управлению резервациями и трансферами, если этот пеймент адресован продавцу на платформе
есть у кого-то какие-то мысли по этому поводу ? Может будет более удачное решение ?