@SergeySmille

Как лучше организовывать управление командами/информировании о результате в CommandBus?

Привет. Пытаюсь разобраться с CQS, Command Bus и всем таким. Пишу пет проект по подсчёту KPI.
Разделил всё на Command и Query - вроде всё ок.

Текущие Command:
SyncVersions
SyncVersionTasks(VersionId)
SyncTaskHistory(TaskId)
CalclulateKPI(VersionId)

Возникли вопросы:
1) как лучше управлять тем, что SyncVersionTasks(VersionId) должен тригерить по каждой задаче SyncTaskHistory(TaskId), а после синка истории по всем задачам должен отработать CalculateKPI?
Первую часть на данный момент решил тем, что SyncVersionTasks паблишит по каждой задаче событие TaskSynced с TaskId, а листенер диспатчит в CommandBus комманду SyncTaskHistory(TaksId). Но как завязаться на то, что нужно задиспатчить CalculateKPI именно после того, как подтянется вся история?

2) Пользователю в UI нужна кнопка - обновить KPI, которая влечет за собой выполнение SyncVersionTasks(VersionId) => SyncTaskHistory(TaskId) * N tasks => CalclulateKPI(VersionId).
Как уведомить пользователя, что KPI пересчитан? Пробрасывать по всем коммандам/событиям id пользователя кажется бредовой идеей. Пока вижу вариант:
- отображать пользователю всплывашку - пересчёт KPI запущен
- в редис/кеш писать id пользователя и, что он ждёт пересчёт KPI
- на странице отображать кто, когда запустил пересчёт KPI
- в хендлере CalculateKPI бросать событие KPICalculated, в листенере которого забирать данные из кеша => слать уведомление пользователю => удалять кеш
  • Вопрос задан
  • 31 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы