iT邦幫忙

鐵人檔案

2023 iThome 鐵人賽
回列表
Software Development

當rust 遇上 cqrs & es 系列

試著利用rust在30天內實作cqrs及event sourcing

鐵人鍊成 | 共 30 篇文章 | 5 人訂閱 訂閱系列文 RSS系列文
DAY 21

D21 snapshot

當事件越來越多的時候,每次查詢aggregate時,若從事件溯源(Event Sourcing)第1個開始一個個往後滾,會使查詢變慢,但Query查詢是映射過僅...

2023-10-06 ‧ 由 Hell Kiki 分享
DAY 22

D22 test snapshot

測試一下snapshot是否work 在new 先前的 cqrs event store 改為aggregate: let reader_store: Pers...

2023-10-07 ‧ 由 Hell Kiki 分享
DAY 23

D23 snapshot size

之前snapshot是每一個事件就snapshot一份,如果改用new_snapshot_store可以設定多少事件snapshot一份,有時候如果想取折衷可以...

2023-10-08 ‧ 由 Hell Kiki 分享
DAY 24

D24 upcaster

寫程式一定會面臨修改,所以先前的在套DomainEvent時,需要實作事件本身的版本,序列化後的event store會紀錄當時產生時的版號,以供未來程式異動時...

2023-10-09 ‧ 由 Hell Kiki 分享
DAY 25

D25 new version of domain event

先拿book開刀,先改一個新的版本,原需要Book沒有作者欄位,添加上此欄位,並設定為必填項目,在command裡是必填,但aggregate及event為了保...

2023-10-10 ‧ 由 Hell Kiki 分享
DAY 26

D26 impl upcaster

upcaster用來把舊版本event映射為新版本,有很多種不同實作方式,比如一版一版跳:1 -> 2 -> 3 ... -> 10;或是直接...

2023-10-11 ‧ 由 Hell Kiki 分享
DAY 27

D27 past events in sourcing

實作完 upcaster 在建立 EventStore時,加入with_upcasters的方式傳入即可使用: let book_event_upcaster...

2023-10-12 ‧ 由 Hell Kiki 分享
DAY 28

D28 test upcater

最後在main裡重置BookCreated事件 let old_events = old_serialized_events(); let _: Vec<...

2023-10-13 ‧ 由 Hell Kiki 分享
DAY 29

D29 metadata in es

event store裡的metadata 先前沒有用到,這個推測是application layer使用,不是Domain Event本身內容,如api接到的...

2023-10-14 ‧ 由 Hell Kiki 分享
DAY 30

D30 Ending

其實沒預期自己可以完成,原本抱著好奇心學rust的同時,查找rust如何實作領域驅動設計及乾淨架構的概念,就無意間翻到了這個套件和其說明文件: 套件:https...

2023-10-15 ‧ 由 Hell Kiki 分享