Enterprise Java实体应该愚蠢吗?
在我们的旧版 Java EE 应用程序中,有大量的值对象 (VO) 类,这些类通常只包含 getter 和 setter,可能和 .这些(通常)是要保存在持久性存储中的实体。(根据记录,我们的应用程序没有EJB - 尽管将来可能会改变 - 我们使用Hibernate来持久化我们的实体。在 VU 中操作数据的所有业务逻辑都在单独的类中(不是 EJB,只是 POJO)。我的OO心态讨厌这一点,因为我确实认为给定类上的操作应该位于同一个类中。因此,我有一种重构的冲动,将逻辑移动到相关的VO中。equals()
hashCode()
我刚刚和一位在Java EE方面比我更有经验的同事进行了讨论,他证实,愚蠢的实体至少曾经是推荐的方式。然而,他最近也读到了质疑这一立场有效性的观点。
我知道有些问题至少限制了可以放在实体类中的内容:
- 它不应该直接依赖于数据层(例如,查询代码应该进入单独的DAO)
- 如果它直接向较高层或客户端公开(例如通过SOAP),则可能需要限制其接口
有没有更有效的理由不将逻辑移动到我的实体中?还是需要考虑的任何其他问题?