Martin Fowler認爲貧血域模型是一種反模式。豐富域模型和ORM
由於Object Relational Impedence Missmatch由於域模型滾動持久性模型似乎也被嚴重關閉。對於持久化和標準化來說,我們傾向於將課程拆分爲非常小的小部分,在這些課程之上掌握方法是愚蠢的。加持久性很少改變,但業務邏輯改變了一點點。
所以我們需要一個建立在持久化模型上的DomainModel(而不是一個也是一樣的)。此域模型將包含業務邏輯屬性和方法。
但是現在這些領域模型仍然落後於服務,爲了將它們暴露給外部世界,我們需要將它們轉換爲DTO。
我們在這裏這樣做曼尼映射。
- 餘輝域模型
- 要域模型轉換爲DTO的,以服務
它並沒有結束之間傳遞下去,因爲DTO可能需要映射到視圖模型。
所有這一切以及重複驗證邏輯的問題仍然沒有消失,因爲客戶端需要實時驗證。 ViewModel對驗證一無所知,因此例如在SPA中,您不得不在客戶端重新編寫驗證邏輯(通常使用javascript)。
服務本質上是無狀態的(消息或RPC導向),所以我們正在做所有這些映射,在持久性到OO之間,然後返回到Procedural,到什麼好處?您如何證明大多數IT預算的實際成本?
我知道如何讓DDD,Aggregate Roots,Domain Models等成爲「酷」,但您如何證明成本和對開發效率的重視?
反模式(或反模式)是社交或商務 操作或軟件工程中的一個模式是可以共同使用,但 無效的和/或反作用於實踐
如果是這樣,DDD和Rich Domain Model不會比「精益」域模型適合上面的反模式定義。對不起,我鄙視加載的單詞「貧血」。
通過保持領域模型「精益」,您實際上允許在不違反「抽象依賴性原則」,「不重複自己」以及映射一個數據的耗時,乏味和容易出錯的過程中共享它載體到另一個,以及任何與之相關的單元測試(除非你正在考慮映射沒有單元測試並希望最好)。
我認爲你鏈接的文章總結了困境。除了我不相信通過網絡發送域模型,這似乎是DTO的工作。在DTO上進行行爲並將其展示給客戶是沒有意義的。所以對我來說,除了他提到的3之外,架構只有「另一層抽象和映射」纔是可行的。這是一個映射!不是說爲了重用而向用戶界面引入UI關注的另一種方式是正確的。我認爲在兩極分化之間存在一個「幸福」媒介。 – Alwyn
「少移動數據,事情可能變得更簡單」 - 他在文章最後的結論,對我來說聽起來像是精益模型。 – Alwyn
「在DTO上進行行爲並將其展示給客戶端是沒有意義的 - 現在我理解您在富/貧域模型和分層之間建立的連接。你是否暗示應該從儘可能多的業務邏輯中剝離域對象,以便直接將它們發送到UI層而不需要DTO?還是你說的其他東西是「精益模型」? – guillaume31