什么是領域模型(domain model)?貧血模型(anaemic domain model)和充血模型(rich domain model)有什么區別


領域模型是領域內的概念類或現實世界中對象的可視化表示,又稱為概念模型或分析對象模型,它專注於分析問題領域本身,發掘重要的業務領域概念,並建立業務領域概念之間的關系。

貧血模型是指使用的領域對象中只有setter和getter方法(POJO),所有的業務邏輯都不包含在領域對象中而是放在業務邏輯層。有人將我們這里說的貧血模型進一步划分成失血模型(領域對象完全沒有業務邏輯)和貧血模型(領域對象有少量的業務邏輯),我們這里就不對此加以區分了。

充血模型將大多數業務邏輯和持久化放在領域對象中,業務邏輯(業務門面)只是完成對業務邏輯的封裝、事務和權限等的處理。下面兩張圖分別展示了貧血模型和充血模型的分層架構

 

貧血模型下組織領域邏輯通常使用事務腳本模式,讓每個過程對應用戶可能要做的一個動作,每個動作由一個過程來驅動。也就是說在設計業務邏輯接口的時候,每個方法對應着用戶的一個操作,這種模式有以下幾個有點:
- 它是一個大多數開發者都能夠理解的簡單過程模型(適合國內的絕大多數開發者)。 
- 它能夠與一個使用行數據入口或表數據入口的簡單數據訪問層很好的協作。 
- 事務邊界的顯而易見,一個事務開始於腳本的開始,終止於腳本的結束,很容易通過代理(或切面)實現聲明式事務。 
然而,事務腳本模式的缺點也是很多的,隨着領域邏輯復雜性的增加,系統的復雜性將迅速增加,程序結構將變得極度混亂。開源中國社區上有一篇很好的譯文《貧血領域模型是如何導致糟糕的軟件產生》對這個問題做了比較細致的闡述。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM