否定洋蔥或clean架構的垂直切片架構 - Jimmy Bogard
許多年前,我們開始了一個新的長期專案,首先,我們基於洋蔥架構構建了它的架構。在幾個月內,這種風格開始顯示出裂縫,我們從這種架構轉向CQRS。隨著轉向CQRS,我們開始圍繞垂直切片而不是層(無論是平面還是同心,它仍然是層)構建我們的架構。從那以後,在過去7到8年左右的時間裡,圍繞垂直切片架構構建應用程式和系統的所有方式一直是我們獨有的方法,我無法想象回到分層架構方法的限制。
傳統的分層/洋蔥/清潔架構在其目標是單體的:
這種架構方式問題是實際上只適用於系統中的少數典型請求。此外,我傾向於看到這些架構嚴重擬合,嚴格遵守依賴關係管理規則。在實踐中,我發現這些規則很少有用,並且你開始得到很多關於真正不應該被抽象的抽象(控制器必須與必須使用儲存庫的服務進行對話)。
相反,我想對我的系統採用量身定製的方法,我將每個請求視為如何處理其程式碼的獨特用例。因為我的系統整齊地分解為“命令”請求和“查詢”請求(HTTP-land中的GET與POST / PUT / DELETE),所以向垂直切片架構的移動使我使用了CQRS。
什麼是“垂直切片架構”?在這種風格中,我的架構是圍繞不同的具體請求功能而構建的,通過這種方法,我們的每個垂直切片都可以自行決定如何最好地滿足請求:
(banq注:對於獲取訂單,直接使用ORM轉換為DTO,對於訂單細節使用原生SQL轉換為DTO,對於發票,使用基於聚合根的事件溯源,取消訂單使用儲存過程,這是一種微服務風格)
在所謂正常的“n層”或六邊形或任何架構中,通過垂直切片移除這些層障礙,並沿著變化軸聚合在一起:
在應用程式中新增或更改功能時,通常會在應用程式中涉及到許多不同的“層”。現在改為沿著切片垂直將這些功能聚合在一起。
最小化切片之間的耦合,並最大化切片內的聚合。
通過這種方法,大多數抽象都消失了,我們不需要任何型別的“共享”層抽象,如儲存庫,服務,控制器。有時我們仍需要這些工具,但我們將交叉切片邏輯共享保持在最低限度。
通過這種方法,我們的每個垂直切片都可以自行決定如何最好地滿足請求。
“ 企業架構模式”一書中的舊域邏輯模式不再需要成為應用程式範圍內的選擇。相反,我們可以從簡單的(事務指令碼)開始,並簡單地重構從我們在業務邏輯中看到的程式碼氣味中出現的模式。新功能只新增程式碼,您不會更改共享程式碼並擔心副作用。非常自由!
但是,這種方法有一些缺點,因為它確實假設您的團隊瞭解程式碼氣味和重構。如果您的團隊不理解“服務”在將邏輯推送到領域時自己卻做得太多相關業務邏輯事情,那麼這種模式可能不適合您。(banq注:服務類似餐廳服務員,服務員不應該做決定,只是協調者,當然如果你想退菜,服務員會決定說:不能退,菜已經燒了。)
如果您的團隊確實理解了重構,並且能夠識別何時將複雜的邏輯推入域,進入DDD服務應該是什麼,並且熟悉其他Fowler / Kerievsky重構技術,那麼您會發現這種架構風格能夠遠遠超過傳統的分層/同心架構。
相關文章
- 單體架構到垂直架構架構
- Dotnet洋蔥架構實踐架構
- Clean架構中不好的部分 -James Hickey架構
- booking-microservices:基於.Net Core的CQRS、DDD、垂直切片架構、事件溯源案例ROS架構事件
- Flutter應用的Clean架構示例專案Flutter架構
- Clean Architecture - 清晰簡潔的Android 應用架構Android應用架構
- Spring Boot的Clean架構教程與原始碼 - BaeldungSpring Boot架構原始碼
- 清晰架構(Clean Architecture)的Go微服務—重大升級架構Go微服務
- 事件溯源的優點並不能兌現 - Jimmy Bogard事件
- Clean架構能夠解決哪些問題? - jbogard架構
- 帶你動手實現 MVP+Clean架構!MVP架構
- 用Quarkus實現乾淨清晰的Clean架構 - Sourced Blog架構
- 架構之:serverless架構架構Server
- OnionArch 2.0 - 基於DDD的洋蔥架構改進版開源架構
- 奈飛Netflix如何在資料整合API領域使用六邊形架構與Clean架構切換到微服務架構? - Netflix TechBlogAPI架構微服務
- 手把手寫一個Clean(+mvp+rxjava)架構的DemoMVPRxJava架構
- 【細品架構4/100】架構之架構切分架構
- 軟體架構師或解決方案架構師必讀的五本書 - javarevisited架構Java
- SaaS架構:流程架構分析架構
- 架構師眼中的高併發架構架構
- 架構設計之架構的演變架構
- 單體架構&微服務架構&中臺服務架構架構微服務
- 架構師修煉之道(二)——架構?設計?架構師?架構
- 前端架構之小小node架構前端架構
- 架構之:資料流架構架構
- 架構師眼裡的高併發架構架構
- SOA架構和微服務架構的區別架構微服務
- 架構架構
- 領域驅動設計和Clean架構之間的區別? - stackexchange架構
- 架構演進之「微服務架構」架構微服務
- MySQL 高可用架構之 MMM 架構MySql架構
- 【架構分析】MESA (EGL/GLES)架構分析架構
- 架構之:軟體架構漫談架構
- 架構之:微服務架構漫談架構微服務
- saltstack的架構架構
- Flink的架構架構
- MySQL的架構MySql架構
- 解決方案架構、系統架構和企業架構區別架構