貧血的Domain Model之說

2022-03-01 15:22:35 字數 928 閱讀 7566

例子1、銀行帳號account:

乙個經常引起爭論的問題就是,deposit/draw方法到底應該建模到 account中還是建模到accountmanager(對乙個銀行出納員的建模)中。

我覺的將deposit/draw建模到accountmanger中是反映現實的,因為account反映到現實世界就是乙個沒有行為能力的實體,而出納員才具有行為能力。

例子2:選課的學生student

對學生建模的時候,enroll(選課行為)毫無疑問應該建模到類student中。

除此之外,我們假設每個學生有乙個考察級點,可以根據這個學生的表現增加或者減少級點,而我們就遇到同例1中提到的deposit/draw一樣的問題,就是增加級點的方法addscore/減少級點的方法reducescore建模到student中還是studentmanager中,個人認為,同於例1,應該建模到studentmanager中而不是student中。

總的來說,方法到底建模到那個class中,就根據這個方法是否是這個class自發的行為。譬如,account的deposit/draw就不應該建模到account中,但是實踐中,建模到account中,往往會帶來一些好處,至於什麼好處,martin的《domain logic and sql》非常全面的分析過了。所以,我感覺,martin舉的例子中,貧血的domain model是亂扣大帽子。

本來就沒什麼transaction script,沒什麼貧血的domain model,martin非要將一種正確的模型叫做「貧血的domain model",而將沒有反映現實世界的、但是有一定實踐價值的模型起乙個風度翩翩的名字。

為什麼有人經常提到貧血的domain model?我覺的,可能很多應用是以資料為中心的,所以,建模的時候,習慣性地思維定向到資料上,建模出來的類完全是db entity的反映。而正確的思路,應該針對整個系統進行物件建模,不要一開始就考慮持久化的問題。

從貧血到充血Domain Model

關於domain model的討論已經非常多了,炒炒冷飯,這裡是自己的一些做法。以workitem 工作流裡的工作項 作為例子 最開始的做法 乙個實體類叫做workitem,指的是乙個工作項或者稱為任務項 乙個dao類叫做workitemdao 乙個業務邏輯類叫做workitemmanager 或者...

從貧血到充血Domain Model

關於domain model的討論已經非常多了,炒炒冷飯,這裡是自己的一些做法。以workitem 工作流裡的工作項 作為例子 最開始的做法 乙個實體類叫做workitem,指的是乙個工作項或者稱為任務項 乙個dao類叫做workitemdao 乙個業務邏輯類叫做workitemmanager 或者...

從貧血到充血Domain Model

關於domain model的討論已經非常多了,炒炒冷飯,這裡是自己的一些做法。以workitem 工作流裡的工作項 作為例子 最開始的做法 乙個實體類叫做workitem,指的是乙個工作項或者稱為任務項 乙個dao類叫做workitemdao 乙個業務邏輯類叫做workitemmanager 或者...