1. 程式人生 > >Axon框架使用指南(一):簡介

Axon框架使用指南(一):簡介

 隨著時間的推移,對軟體專案的需求迅速增加。公司希望他們的(網路)應用程式與他們的業務一起發展。這意味著不僅專案和程式碼庫變得更加複雜,而且意味著不斷新增,更改和功能被刪除。發現一個看起來很容易實現的功能可能要求開發團隊拆分整個應用程式可能令人沮喪。此外,今天的Web應用程式面向潛在數十億人的受眾,使可擴充套件性成為無可爭辯的要求。

        雖然有很多應用程式和框架涉及可擴充套件性問題,例如GigaSpaces和Terracotta,但它們有一個基本缺陷。這些技術堆疊嘗試解決可伸縮性問題,同時讓開發人員使用他們習慣的分層架構開發應用程式。在某些情況下,他們甚至會阻止或嚴重限制使用真實領域模型,從而迫使所有領域邏輯進入服務。儘管開始構建應用程式的速度會更快,但最終這種方法會導致複雜性增加並使開發速度放慢。

         命令查詢責任分離(CQRS)模式通過徹底改變應用程式架構的方式來解決這些問題。 它不是將操作邏輯分成單獨的層,而是判斷操作是在改變應用程式的狀態還是在查詢,從而將操作分離到不同的部分。這意味著執行命令(可能改變應用程式狀態的動作)由與查詢應用程式狀態的元件不同。這種分離的最重要原因是每個人都有不同的技術和非技術要求。當執行命令時,查詢元件使用事件同步或非同步更新。這種通過事件進行更新的機制,使得這種架構具有可擴充套件性,可伸縮性並最終能夠更好地維護。

     CQRS 的完整解釋不在本文件的範圍內。如果您想了解更多關於 CQRS 的背景資訊, 請訪問Axon框架網站: www.axonframework.org。它包含指向背景資訊的連結。

       由於CQRS與主導當今軟體領域的分層架構截然不同,因此開發人員在嘗試圍繞這種架構尋找解決方案時陷入一些陷阱並不罕見。 這就是Axon Framework構思的原因:幫助開發人員在關注業務邏輯的同時實施CQRS應用程式。

什麼是Axon?

        通過支援開發人員應用命令查詢責任分離(CQRS)體系結構模式,Axon Framework可幫助構建可擴充套件,可擴充套件和可維護的應用程式。它通過提供最重要構建塊的實現來實現,如聚合,儲存庫和事件匯流排(事件的排程機制)。此外,Axon提供了註釋支援,它允許您構建聚集和事件偵聽器,而無需將程式碼繫結到Axon特定邏輯。這使您可以專注於業務邏輯而不是基礎設施,並幫助您使程式碼更容易獨立測試。

       Axon並不以任何方式試圖對開發人員隱藏CQRS架構或其任何元件。因此, 對每個團隊,根據團隊規模的不同, 最好有一個或多個開發人員對 CQRS 有透徹的瞭解。然而,Axon在確保將事件傳遞給正確的事件偵聽器並按正確的順序同時處理它們方面提供了幫助。這些多執行緒問題通常很難處理,導致難以跟蹤的錯誤,有時會導致應用程式完全失敗。當你有緊迫的期限時,你可能甚至不想關心這些問題。 Axon的程式碼已經過徹底測試,可以防止這些型別的錯誤。

        Axon框架由許多模組(jars)組成,這些模組提供了構建可擴充套件基礎架構的工具和元件。 Axon核心模組為不同元件提供基本的API,以及為單個JVM應用程式提供解決方案的簡單實現。其他模組通過提供專門的構建模組來解決可伸縮性或高效能問題。

何時使用Axon?

       並非所有的應用程式都能從Axon中受益。 簡單的CRUD(建立,讀取,更新,刪除)預計不會擴充套件的應用程式可能不會從CQRS或Axon中受益。但是,有許多應用程式可以從Axon中受益。可能受益於CQRS和Axon的應用程式是那些存在一個或多個以下特徵的應用程式:

  • 該應用程式可能會在很長一段時間內對新功能進行擴充套件。例如,一家網上商店可能會開始跟蹤訂單進度的系統。在後期階段,這可以通過庫存資訊進行擴充套件,以確保在銷售物品時更新庫存。甚至以後,會計可能需要記錄銷售的財務統計資料等。雖然很難預測未來軟體專案的演變情況,但大多數型別的應用程式都能清晰地表現出這類需求。
  • 該應用程式具有較高的讀寫比。這意味著資料只會被寫入幾次,並且會被讀取多次。由於查詢的資料來源與用於命令驗證的資料來源不同,因此可以優化這些資料來源以進行快速查詢。重複資料不再是一個問題,因為事件在資料更改時釋出。
  • 該應用程式以多種不同格式呈現資料。現在許多應用程式在網頁上顯示資訊時不會停止更新。例如,某些應用程式會每月傳送一封電子郵件通知使用者發生的可能與其相關的更改。搜尋引擎是另一個例子。他們雖然使用與您的應用程式相同的資料,但針對快速搜尋進行了優化。報告工具也可將資訊彙總到報告中,這也是相同資料的不同格式。使用Axon,相同資料的不同使用目的的資料來源可以實時或按計劃獨立更新。
  • 當應用程式有不同的受眾並使用分離的元件操作相同資料時,它也可以從Axon中受益。這種應用的一個例子是線上商店。員工將更新網站上的產品資訊和可用性,同時客戶下訂單並查詢其訂單狀態。藉助Axon,這些元件可以部署在不同的機器上,並使用不同的策略進行擴充套件。他們使用事件保持最新狀態,Axon將派發給所有訂閱的元件,而不管他們部署在哪臺機器上。
  • 與其他應用程式整合可能是繁瑣的工作。使用命令和事件嚴格定義應用程式的API可以更容易地與外部應用程式整合。 任何應用程式都可以傳送命令或偵聽由應用程式生成的事件。