領域驅動設計和Clean架構之間的區別? - stackexchange
問題:我一直在研究Robert C. Martin的clean Architecture(CA),發現它對於促進大型應用程式的架構標準非常有用。透過實施案例研究,我對如何使用它來幫助構建更靈活,健壯和可擴充套件的應用程式有一些經驗。最後,我還解決了它的潛在缺點(在此回答中概述了其中的許多缺點)。
不過,我的問題是Eric Evans提出的域驅動設計(DDD)與“乾淨架構”有何關係。儘管對DDD不太熟悉,但我注意到DDD和CA之間有許多相似之處。所以這是我的問題:
- CA和DDD之間有什麼區別(除了它們的命名方案之外)?
- 是應該同時使用它們,還是從兩者中汲取見識,還是應該在另一個之上使用它們?
從研究中,我唯一能找到的就是CA“從此處獲取了對業務物件使用更高階別的抽象” 。
回答:兩者都集中於將域程式碼與應用程式和基礎結構程式碼分開。但這就是相似之處結束的地方。
在Clean/Hexagonal/Onion(或簡稱CHO,分別代表乾淨架構、六邊形架構和洋蔥架構)架構中,這種脫鉤的目標是可測試性和模組化,其預期效果是可以將我們軟體的“核心”與世界其他地區隔離開來。
在DDD中,主要目標是與業務專家建立通用語言。域與其餘應用程式程式碼的分離只是此主要目標的副作用。關於將類設計為實體和聚合也有一些發言權,但這僅在域本身內。關於域程式碼之外的設計,它無話可說。
在實踐中,您可能會發現您同時使用兩者。您使用CHO體系結構來設計系統的整個結構,而“域核心”則被隔離在單獨的模組中。然後,您可以使用DDD與領域專家協作,並可能使用諸如實體和集合之類的DDD概念來設計此領域核心。
其他回答:DDD是一種嘗試透過應用某些策略和策略來幫助您決定如何開發某些軟體的範例。理解域並在您的程式碼中建立一個模型是基礎部分,該程式碼使用領域術語來實現域邏輯。這樣,以領域為中心的設計可以幫助實現和開發您的領域邏輯。
作為以域為中心的架構的一個示例,乾淨的架構是一種結構化程式碼以在演化過程中實現某些屬性的特定方法。特別地,域層可以用於實現如上所述的域邏輯。CA會告訴您域層在軟體設計中的位置,以及依存關係應如何跨層流動。
DDD僅宣告您應該在程式碼中反映您的域模型,而DDD卻沒有告訴您如何像CA一樣將其與其餘程式碼分層組織。CA並沒有告訴您如何像DDD那樣使用戰略或戰術模式來使其與領域保持一致。如果一起使用,CA會定義域層是其中一部分的程式碼的整體結構,而DDD會告訴您如何查詢域層的詳細資訊。
banq回答:Clean架構是DDD的實現落地到軟體的手段,DDD是從業務需求抽象出實體領域模型(類似代表資料庫表模型的實體物件,但區別於它們的是有業務行為,充血模型與失血模型的區別),而CHO則是幫助這些業務實體模型生長在軟體技術環境中,DDD是一棵植物或種子,CHO是土壤花盆,當然CHO是一種特殊的土壤和花盆,能夠有利於植物生根,不會對植物生長有侵入干擾,好的技術架構不應該汙染或侵入業務模型,這是它們兩個的統一宗旨和共識。
相關文章
- 微服務架構設計基礎之領域驅動設計微服務架構
- 領域驅動設計整合與架構架構
- 問題驅動設計與領域驅動設計的區別 - abdullin
- 《實現領域驅動設計》筆記——架構筆記架構
- 戲說領域驅動設計(十三)——核心架構架構
- 戲說領域驅動設計(九)——架構模式架構模式
- 領域驅動設計DDD和CQRS架構模式落地實踐架構模式
- 微服務與領域驅動設計,架構實踐總結微服務架構
- DDD領域驅動設計:領域事件事件
- 當今微服務盛行之架構師必經之路-領域驅動設計-下微服務架構
- 當今微服務盛行之架構師必經之路-領域驅動設計-上微服務架構
- MasaFramework -- 領域驅動設計Framework
- 領域驅動設計示例
- 理解領域驅動設計
- Java開發架構篇:領域驅動設計架構基於SpringCloud搭建微服務Java架構SpringGCCloud微服務
- Java開發架構篇《初識領域驅動設計DDD落地》Java架構
- Java開發架構篇:初識領域驅動設計DDD落地Java架構
- DDD領域驅動設計架構模式:防腐層(Anti-corruption layer)架構模式
- 10個領域驅動設計應避免的誤區
- [.NET領域驅動設計實戰系列]專題二:結合領域驅動設計的面向服務架構來搭建網上書店...架構
- JavaScript中的領域驅動設計JavaScript
- 戲說領域驅動設計(廿五)——領域事件事件
- 領域驅動設計戰術模式--領域事件模式事件
- 領域驅動設計核心概念
- 領域驅動設計簡介
- DDD領域驅動設計pdf
- 再談領域驅動設計
- 實現領域驅動設計
- EntityFramework之領域驅動設計實踐介紹Framework
- 結合領域事件和微服務的實現領域驅動設計 - Alagarsamy事件微服務
- 整潔的領域驅動設計 - George
- 基於阿里開源的COLA架構和DDD領域驅動設計構建貨物運輸系統阿里架構
- 戲說領域驅動設計(廿一)——領域服務
- 領域驅動設計戰術模式--領域服務模式
- DDD-領域驅動設計示例
- 微服務領域驅動設計 - semaphoreci微服務
- 淺談DDD(領域驅動設計)
- 淺談 DDD 領域驅動設計