Java中的事件溯源簡介:包含學習進度的練習工具包

banq發表於2022-07-11

事件溯源被認為是一種複雜的模式。事實上,事件源是一個相當實用和直接的概念。它有助於建立更貼近業務的可預測的應用程式。如今,儲存很便宜,而資訊是無價的。在事件源中,沒有資料會丟失。

本工具包目的是為參與者建立關於一般概念及其相關模式的知識。獲得的知識將允許有意識地設計架構解決方案和分析相關風險。

重點將放在對架構的務實理解上,並在實踐中使用Marten和EventStoreDB來應用它。
  • 事件驅動架構的介紹。與經典方法的區別是基礎和術語(事件、事件流、命令、查詢)。
  • 什麼是事件源,它與事件流有什麼不同。優點和缺點。
  • 寫入模型,來自Marten和EventStoreDB的例子的資料一致性保證。
  • 處理業務邏輯的各種方法。聚合、命令處理程式、功能方法。
  • 在Marten和EventStoreDB的例子中,從事件中建立讀取模型的預測、最佳實踐和關注點。
  • 事件源和EDA中的挑戰:可交付性保證、事件處理的順序、空閒性等。
  • Saga, Choreography, Process Manager, 分散式程式的實踐。
  • 應用架構中的事件源,與其他方法(CQRS、微服務、訊息傳遞等)的整合。
  • 事件建模中的好的和壞的做法。
  • 生產中的事件源,演變,事件的模式版本等。


練習01、事件建模
具有以下購物車流程:

  1. 客戶只有在開啟產品後才能將產品新增到購物車中。
  2. 在選擇產品並將其新增到購物籃時,客戶需要提供選擇的數量。產品價格由系統根據當前價目表計算得出。
  3. 客戶可以從購物車中移除具有給定價格的產品。
  4. 客戶可以確認購物車並開始訂單履行流程。
  5. 客戶也可以取消購物車並拒絕所有選擇的產品。
  6. 購物車確認或取消後,該產品將無法再從購物車中新增或移除。

對在此過程中發生的事件和表示購物車當前狀態的實體進行建模。用程式碼編寫這些事件。建立代表特定購物車的示例事件。您可以在EventsDefinitionTests測試檔案中執行此操作。

練習 02 - 從事件中獲取當前實體狀態
具有定義的事件結構和表示上一個練習中的購物車的實體,填充一個getShoppingCart將從事件重建當前狀態的函式。
如果需要,您可以修改事件或實體結構。
有兩種變體:


選擇您的首選方法(或兩者)來解決此用例。
提醒:在事件溯源中,我們透過按出現順序應用事件資料來重建當前狀態

資訊登記表