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