【发布时间】:2009-07-07 08:41:57
【问题描述】:
正如我对 MVC 的理解,模型的逻辑也应该进入模型本身——使每个对象都成为一个自包含的实体。这意味着类的方法必须具有触发器和动作链。例如,通过在 Person 类中使用 setZipCode(zip) 可以触发一个操作,它会从 zip 到 city 表中查找邮政编码,然后同时设置 setCity(city)。
这一切看起来都很好,但是当您将一些 JPA 实现纳入图片时会发生什么?正如我所看到的,类的 setter 和 getter 必须清除所有额外的逻辑,因为 JPA 实现使用这些来构建对象。因此你不能在 setZipCode 中调用 setCity。我们已经通过将所有特定于模型的逻辑移动到控制器层来解决这个问题。在这种情况下,我们不会直接调用 Person,而是调用 PersonController.setAddressInfo(zip) 来处理两者,或者类似的东西。也许更好的选择是在执行此操作的实体内部具有瞬态函数。
所以这是我的问题:我是否错过了 MVC 或 JPA 原则中的一些基本内容,或者在使用 ORM 层时不能完全实现 MVC?如果通用 setter 和 getter 对于 JPA 来说是私有的,并且这些类将有一个单独的公共、瞬态 API 供开发人员使用,那会更好吗? (出于某种原因,Hibernate 似乎不介意访问私有方法。)
在我们在项目中使用 Hibernate 的 JPA 实现中,我的同事在另一个项目中使用了 EclipseLink,我最近一直在阅读一些关于 OpenJPA 的内容。
【问题讨论】:
标签: java model-view-controller orm jpa