JSF中的JPA实体与紧耦合

时间:2014-05-05 12:15:44

标签: jpa entity javabeans managed

我对以下帖子

中提供的答案有跟进问题

JPA Entity as JSF Bean?

我知道这是JSF应用程序中使用的做法但是,我无法理解该帖子中提供的方法如何消除紧耦合?有人可以回答吗?

1 个答案:

答案 0 :(得分:0)

该视图并未真正与其基础模型分离,因为它的目的是显示其模型的内部结构。

然而,这个视图模型是什么以及它如何附加到视图会有所不同,并且直接用持久性实体不支持视图会有一些好处。

支持bean通常必须执行服务调用或至少执行CRUD操作。两者都不应成为JPA实体的关注点。控制器也可用于验证,访问限制,缓存等。

JPA实体通常不会控制它自己的生命周期。使其成为支持bean可能需要实体控制它自己的事务,至少要处理CRUD操作。这可以与ActiveRecord实现一起使用,但是IMHO JPA实体不能很好地适应AR模式。

在Java EE应用程序中,DTO pattern通常用于将持久性与视图,其他外部系统或甚至DAL之上的应用程序的所有层分离。实体被映射到具有更具体目的的DTO,例如,将来自不同实体的相关属性选择呈现给前端。

编辑:如果我理解你的问题是正确的 - 你有一个应用程序,其中支持bean的getter执行数据库操作并导致你的应用程序运行缓慢。 这实际上是一种不好的做法。 JSF生命周期导致多次调用这些getter,每次调用都会导致不必要的DB调用。

通常的做法是在构造支持bean之后和最初显示数据之前从DB获取完整数据(在支持bean的生命周期内有效地缓存数据)。仅当用户明确刷新数据时,才应从数据库中重新获取数据。

有关详细说明,请参阅this post