業務邏輯模式——貧血領域模型(反)模式

貧血領域模型(反)模式

領域模型的標誌是與對象關聯的行爲。而“到底哪個行爲”是領域模型模式的支持者經常聽到的反對聲音。領域模型模式有時候會與另一個被稱爲貧血領域模型(Anemic Domain Model,ADM)的模式形成對比。

模式概論

在貧血領域模型裏,所有對象仍然遵循現實世界領域實體的命名規範,實體之間也有關係,模型的總體結構也非常接近現實領域空間。但是,實體裏沒有行爲,只有屬性。這正是爲什麼在模式的名字裏使用“貧血”這個形容詞。

ADM的指導原則是你不必把任何邏輯放在領域對象裏。所有需要的邏輯都放在一組服務組件裏,這些組件共同構成完整的領域邏輯。這些服務使用領域模型,訪問存儲,以及安排持久化。

從數據庫推斷模型可能會導致貧血

貧血領域模型的標準例子是當從現有數據庫結構推斷模型時得到的一組對象。如果你用Entity Framework來做,默認得到的只是一個貧血領域模型,生成的所有類只包含帶有公共get和set的屬性。

ADM是一個模式還是反模式?

關於ADM的普遍看法是:它更接近反模式而非模式,最好不要遵循這個設計規則。

爲什麼認爲它是一個反模式
ADM違背了面向對象設計的基本理念,把數據和流程結合起來。貧血領域模型實際上只是過程式設計。貧血對象不是真正的對象。貧血對象不過是get和set的容器而己。

底線是,ADM是反模型,尤其在複雜的領域裏使用,並且面臨大量頻繁更改的業務規則。就數據驅動應用程序和CRUD系統而言,貧血模型己經足夠了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章