23. SRP на уровне метода !
Принятие решения о
возможности перехода
состояния
(бизнес-правила)
Переход состояния
(транзитор)
Собственно, изменен
ие состояния
(аппликатор)
24. И как это работает?
Ну и как это всж работает?
39. Оптимизация операции восстановления
состояния при помощи «снимков»
E1
Аггрегат с очень
E2
длинным
жизненным …
циклом и кучей
restore
ивентов E100500
Snapshot
[rev: E100500]
replay the rest
of events
E100501
41. Без 2PC
Command Queue
С1 С2 .. Сn
0. peek (C1) 2. remove (C1) T2
Command Processor
1. store (E1, E2)
T1
Event Store
42. Без 2PC необходима
поддержка идемпотентности
Command Queue
С1 С2 .. Сn
0. peek (C1) 4. remove (С1)
Command Processor
Commit
1. store (С1, [E1, E2]) 2. dup (С1)
E1
E2
Event Store
43. Без 2PC необходима
поддержка идемпотентности
Command Queue
С1 С2 .. Сn
0. peek (C1) 4. remove (С1)
Command Processor Commit
ID : UUID
1. store (С1, [E1, E2]) 2. dup (С1)
E1
E2
Event Store
44. Без 2PC необходима
поддержка идемпотентности
Command Queue
С1 С2 .. Сn
0. peek (C1) 4. remove (С1) Command
ID : UUID
Command Processor Commit
ID : UUID
1. store (С1, [E1, E2]) 2. dup (С1)
E1
E2
Event Store
45. Обработка событий
publish update
E1 E2
Event Store View Model
2PC, опять?
46. Обработка событий (PULL)
Get new events since (Time)
Event Store View Model
Запоминать последнее
обработанное событие
47. Обработка событий (PULL)
Get new events since (Time)
Event Store View Model
Commit
ID : UUID
E1
E2
48. Обработка событий (PULL)
Get new events since (Time)
Event Store View Model
Commit
ID : UUID
Dispatched : bool
E1
E2
49. Обработка событий (PULL)
Get undispatched events
Event Store View Model
Commit
ID : UUID
Dispatched : bool
mark as
dispatched
E1
E2
50. Обработка событий (PUSH)
publish (commit)
Event Store View Model
Commit
ID : UUID
Идемпотентность во
Dispatched : bool
View Model хранилище
mark as по-прежнему нужна
dispatched
E1
E2
51. Встроенный диспетчер событий
BUS
cmd events
Command Event
Your App Processor Publisher
events commit OK
Event Store commit Dispatcher
Storage
commit
mark as dispatched
52. Встроенный диспетчер событий
BUS
cmd events
Command Event
Your App Processor Publisher
events commit FAIL
Event Store commit Dispatcher
Storage
commit dispatched = false