【问题标题】:Data persistence in Java Server Faces with Hibernate/JPAJava Server Faces 中的数据持久性与 Hibernate/JPA
【发布时间】:2013-11-29 07:50:19
【问题描述】:

我计划使用 Java Server Faces 构建一个 Web 应用程序,但我不确定如何处理我的实体的持久性。对于 php 项目,我使用带有 Doctrine 2 的 Symfony 框架。我主要在控制器中调用实体管理器的 persist 方法。因此,业务逻辑没有单独的类。我尝试过 Hibernate,我认为这是对 Doctrine 的一个很好的替代。 ;)

Java 项目是针对大学的,我想将业务逻辑从控制器/bean 转移到业务逻辑类。

我阅读了有关数据访问对象和存储库模式的文章和教程 (http://docs.spring.io/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html)。

在数据访问对象模式中,我有一个用于我的实体的类和一个用于我的 DAO 对象/实体的接口和一个类,在存储库模式中,我有一个用于我的实体的类和一个用于存储库的类。

但是我的业务逻辑到哪里去了?我是否必须为业务逻辑层和在类中为每个实体编写一个接口和一个类,我只需调用我的 dao/repository 方法?如果是这样,这两种模式有什么区别?

如果我完全错了:Java Server Faces 的数据持久性(使用 Hibernate/JPA)的(行业)标准是什么?

【问题讨论】:

    标签: java hibernate jpa spring-data-jpa


    【解决方案1】:

    项目的架构必须按照“低耦合、高内聚”的原则组织好

    系统层应该很好分离。基本架构有 3 层。

    1. 表示层:JSF 托管 bean 位于该层中。该层的任务是对应用户动作,保存用户数据并将数据展示给用户。基本上,无论您使用哪种实现(JSF、Spring MVC 或 Struts),它的职责都受 MVC 模式的限制
    2. Bussimess Logic Tier:从页面收集的数据和操作被发送到该层以对数据进行操作。您不应在 Presentation Tier 中处理数据并准备响应。这是业务逻辑层的责任。(Spring,CDI)
    3. 集成层:无论使用何种库技术(Hibernate、JPA、JDBC),都应在此层中完成数据库访问。

    如图所示。您的 JSF 托管 bean 应该只能处理来自页面(控制器)和页面数据(模型)的请求。你可以看看this answer 来了解JSF MVC。因此,最好不要在 JSF 托管 bean 中连接 DB。这不是一个好习惯。

    您问题的第二部分。所有技术,Hibernate、JPA、Spring JDBC,都使用相关数据库的 JDBC 驱动程序。 JDBC 驱动程序是唯一连接到数据库的东西。但是,最好选择如何连接到 DB、Hibernate、JPA 或 Spring JDBC 的方法。

    你可以下载my example application,它基本上实现了这个架构。

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 2010-11-25
      • 2017-08-18
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      相关资源
      最近更新 更多