Axon是一個輕量級框架,能夠幫助開發(fā)者通過在架構(gòu)層面構(gòu)建可擴展和可伸縮的應用。(注:以DDD面向領(lǐng)域驅(qū)動設(shè)計為基礎(chǔ)的CQRS框架) Axon Framework背景、發(fā)展簡史 隨著時間的發(fā)展,軟件的需求也在不斷增長。公司都希望自己的(web)應用程序和自身業(yè)務(wù)共同發(fā)展。這就意味著不僅僅是工程和代碼變得更復雜,也意味著功能不斷地新增、更改和移除。它令人沮喪的是,一個看似易于實現(xiàn)的功能,卻要求開發(fā)團隊改動整個應用程 序。此外,如今的web程序的目標是針對潛在的數(shù)十億用戶,這便使可伸縮性成了必要的條件。 雖然有很多的應用和框架圍繞著可擴展性問題進行處理,例如GigaSpaces(類似Microsoft Azure) 和 Terracotta(分布式緩存線性擴展平臺),它們都存在著一個根本的缺陷。他們通過要求開發(fā)人員在開發(fā)應用時,使用分層體系架構(gòu),來試圖解決可擴展性問題。在某些情況下,他們甚至會阻止或嚴格限制使用一個真正的領(lǐng)域模型,強迫所有領(lǐng)域邏輯都放到服務(wù)中。雖然可以很快地構(gòu)建一個應用程序,最終,這種做法將導致復雜性的增加和開發(fā)速度減慢。 命令查詢職責分離(CQRS)模式解決了這些問題,大幅改變了應用程序的架構(gòu)。CQRS不是將分離的邏輯分到不同的層 ,邏輯的分離是以改變應用程序的狀態(tài)或查詢?yōu)橐罁?jù)。這意味著,執(zhí)行命令(行為有可能更改應用程序的狀態(tài))和查詢應用程序數(shù)據(jù)是由不同的組件執(zhí)行。這種分離事實上最重要的原因是,他們各自有不同的技術(shù)和非技術(shù)的要求。當命令執(zhí)行后,查詢組件利用事件同步或異步地進行更新。該更新機制通過事件來完成,正是這種架構(gòu)如此的可擴展,可伸縮,最終會更易于維護。
由于CQRS與主導當今軟件局面的分層架構(gòu)有著根本上的不同,開發(fā)人員試圖找到自己實現(xiàn)這個架構(gòu)的方式,但往往會掉入各種陷阱。這就是了Axon Framework 產(chǎn)生的原因:幫助開發(fā)人員實現(xiàn)CQRS,并讓他們只專注于業(yè)務(wù)邏輯。 Axon是什么? Axon Framework 通過支持開發(fā)者應用命令查詢職責分離(CQRS)架構(gòu)模式,來幫助構(gòu)建可伸縮、可擴展和可維護的應用程序。它通過提供最重要的構(gòu)建塊的實現(xiàn)來實現(xiàn),如:聚合、倉儲以及事件總線(事件的調(diào)度機制)。此外,Axon提供了對注解(annotation)的支持,它允許你構(gòu)建聚合和事件監(jiān)聽器而不用將你的代碼捆綁到Axon特有的邏輯。這使你能夠?qū)W⒂跇I(yè)務(wù)邏輯, 而不是數(shù)據(jù)傳輸(the plumbing),并幫助你使代碼更容易隔離測試。 Axon不會試圖以任何方式隱藏CQRS架構(gòu)或任何組件。因此,根據(jù)團隊規(guī)模,明智的選擇是,每 個團隊中有一個或多個對CQRS有著透徹了解的開發(fā)人員。不管怎么樣,Axon幫助保證把事件交付給正確的事件監(jiān)聽器,并按正確的順序并發(fā)處理它們。這些多線程問題通常很難處理,導致難以跟蹤Bug、應用程序完全失去響應。當你的時間緊迫,你可能甚至不想去關(guān)心這些問 題。Axon的代碼是經(jīng)過完全測試的,以防止這些類型錯誤的出現(xiàn)。 Axon Framework由多個模塊(jar)組成,這些模塊提供工具和組件來構(gòu)建可伸縮的基礎(chǔ)設(shè)施。Axon核心模塊為不同的組件提供了基本的API,并為單JVM的應用程序解決方案提供了簡單實現(xiàn)。其他模塊提供專業(yè)的組件,來解決可伸縮性和高性能的問題。 何時使用Axon? 并不是每一個應用程序都會從Axon中獲益。簡單的CRUD (Create, Read, Update, Delete) 應用程序、沒有橫向擴展預期的應用程序,可能無法從CQRS或Axon中受益。 具有以下一個或多個特點的應用程序可能會從CQRS和Axon中受益:
|
|