2012-04-21 47 views
2

我讀了幾篇文章通知,在Java EE環境中實體bean被認爲是貧血(指只含有getter和setter不執行的行爲)。爲什麼實體bean被認爲是貧血?

什麼阻止我把行爲變成實體bean?因此,會話bean(無狀態或有狀態)可以將所有業務邏輯委託給它們(邏輯有意義的由實體擁有)。

我不明白爲什麼實體bean必然貧血。

回答

2

單純從語義的角度來看,你會期望一個實體bean是一個實體及其屬性的表示。如果你將它與一些邏輯結合起來,那麼你會爲你的實體類增加額外的責任。當我們從捲毛的法律或單一職責原則知道,每個類應該做的一兩件事,只有一兩件事:

http://www.codinghorror.com/blog/2007/03/curlys-law-do-one-thing.html

http://en.wikipedia.org/wiki/Single_responsibility_principle

如果你認爲你有足夠強大的理由違反這個原則,你可以,但就我的經驗而言,沒有理由足以違反標準的軟件工程實踐,特別是如果你像我一樣認爲軟件的質量最能代表其代碼質量。

2

有沒有實現對實體bean功能的限制,但他們並不意味着在整個應用程序中使用這樣的大部分時間,你會在你的會話Bean添加修改實體的行爲只是因爲會話Bean都應該例如從前端訪問。

如果深究下去,會話bean的方法通常是事務性和安全性方面的裝飾,而實體bean都沒有,所以你的應用程序可能無法正常預期的方式,如果你添加代碼到實體。