2012-04-21 81 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都没有,所以你的应用程序可能无法正常预期的方式,如果你添加代码到实体。