本文轉載自【何以解耦】:codedecoupled.com/php-es-projector...
在事件溯源架構中,通過事件流獲取應用的當前狀態可能造成效能問題,Projector(放映機)通過監聽事件,生成獨立的檢視儲存應用的當前狀態。我們可以將其想象成資料庫中的物化檢視,或者是一種快取。
以下是從我們的實戰經驗中總結出的幾種 Projector 用例。
實戰用例
查詢模型
使用者對頁面的反應速度要求較高,我們可以使用 Projector 生成服務於使用者的查詢模型。
值得一提的是 Projector 可使用與事件流不同的資料持久化方式,比如事件流原本儲存在 MySQL, Projector 可使用 ElastiSearch 持久化查詢模型:
讓我們看一個簡單的案例,使用 Projector 生成訂單查詢模型:
支援業務實現
當其他客戶需要及時獲取應用的當前狀態,但是無法通過簡單的事件傳送時,我們可以使用 Projector 生成類似於緩衝的 Repository。 此 Repository 將為實現業務邏輯提供及時的應用狀態。
讓我們看一個簡單的案例,使用 Projector 生成車輛可預定 Repository:
值得注意的是,這種用例傾向於同步處理方案,因為其時效性一般比較大。
總結
Projector 是一個簡單且強大的模式,Projector 的職責單一且專注,易於編寫單元測試。
本文轉載自【何以解耦】:codedecoupled.com/php-es-projector... ,如果你也對 TDD,DDD 以及簡潔程式碼感興趣,歡迎關注公眾號【何以解耦】,一起探索軟體開發之道。
本作品採用《CC 協議》,轉載必須註明作者和本文連結