为什么实体bean被认为是贫血?

时间:2012-04-21 22:36:58

标签: java entity anemic-domain-model

我读了几篇文章,告知Java EE环境中的实体bean被认为是贫血的(意味着只包含getter和setter而没有实现行为)。

什么阻止我将行为放入实体bean?因此,会话bean(无状态或有状态)可以将所有业务逻辑委托给它们(逻辑意义上由实体拥有)。

我不明白为什么实体豆必然贫血。

2 个答案:

答案 0 :(得分:2)

从纯粹的语义角度来看,您会期望ENTITY bean是实体及其属性的表示。如果您将此与某些逻辑相结合,那么您将为实体类添加额外的责任。正如我们从Curly定律或单一责任原则中所知,每个班级应该只做一件事,一件事:

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

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

如果您认为自己有足够的理由违反这一原则,那么您可以,但就我的经验而言,没有任何理由足以违反标准的软件工程实践,特别是如果您像我一样相信软件质量最好用代码的质量来表示。

答案 1 :(得分:2)

在实体bean上实现功能没有任何限制,但它们并不打算在整个应用程序中使用,所以大多数时候你会添加修改Session Bean上实体的行为,因为Session Bean应该是例如,从前端访问。

如果我们更深入,会话bean方法通常用事务和安全方面进行修饰,而实体bean则不是,因此如果您将代码添加到实体中,您的应用程序可能无法按预期方式运行。