我正在开发一个使用JSF 2和JPA 2 (EclipseLink 2.3)的项目。在JSF 2中,我了解到我们必须将模型与控制器分开,并将同样的事情与视图分开(感谢BalusC)。但是现在有了从JPA生成的POJO,我想知道bean,模型,现在是否应该是POJO。
我的视图将是我的。xhtml页面,在JSF 2.0中开发,它将与我的控制器交互,然后在控制器中调用DAO的类,然后在我的数据库中操作。
这样对吗?我是说MVC的概念?我想把每件事都做好,有什么建议吗?
从低级视图(高级视图的进一步细分)来看,模型由实体或dto表示。视图由Facelets模板表示。控制器由您的托管bean表示。它基本上是一个M(MVC) c。 注意"POJO"是旧J2EE/Hibernate时代遗留下来的一个术语。现在,在Java EE/JPA中,它们被称为"实体"。是的,就是那些@Entity
爪哇人。还要注意,有些人可能会选择使用普通的dto,而不是将JSF代码与服务层解耦的实体。然后,JSF应该使用这些dto作为模型,服务层应该依次在这些dto和实际实体之间进行映射。我认为这是没有必要的。EJB3/JPA2是一个相当漂亮的API,它已经将大量的样板代码最小化了,而在旧的J2EE时代,您可能会使用dao/dto。对于Java EE 6及更高版本,实际上并不需要能够从服务层切换到Spring。一切都是经过深思熟虑和标准化的。参见:
不完全正确。通常最好避免在视图中直接引用模型对象;您可以用DTO(数据传输对象)代替它们,DTO仅用于包含要显示的数据
在我看来,这是不正确的。XHTML页面是视图,而控制器是JSF servlet(框架已经提供了),而所谓的"控制器"实际上是模型(业务逻辑)。JPA pojo是模型(数据模型)的一部分。
您应该从视图中调用业务逻辑来获得结果(作为JPA pojo),并在视图中直接使用它们(在您的体系结构中不需要转换为DTO)。
在你的模型中,你可以按照你的意愿组织业务逻辑(如果你认为你需要一个DAO层,这在行业中很常见,你可以把它放进去)。