答案 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。