`

pojo、dao、service三层的关系

    博客分类:
  • SSH
阅读更多
文章来源于网络,仅用于学习:

1,dao和service对应

       一般情况下,Hibernate DAO只操作一个POJO对象,因此一个DAO对应一个POJO对象。 Service层是为了处理包含多个POJO对象(即对多个表的数据操作)时,进行事务管理(声明式事务管理)。Service层(其接口的实现类)被注入多个DAO对象,以完成其数据操作。

2, Service之有无   

        这一点我的看法未必正确,我的脑海现在有两种构建业务层的模式:   

      模式1是Service + DAO,即DAO中只做CRUD及类似的简单操作(称之为功能点,不包含业务逻辑),Service中通过调用一个或多个DAO中的功能点来组合成为业务逻辑.Service的数量应该由功能模块来决定。   

      在这种模型中业务逻辑是放在Service中的,事务的边界也应该在Service中控制. 当然,直接在Service中控制事务会引入非业务逻辑的代码,幸好Spring的AOP可以解决这个问题,这也是引入Spring的原因之一.    

       如果说到缺点,就在于对某些对象的操作就是简单的CRUD,Service层显得累赘.     模式2是Service + BO, 而BO = DAO + 业务方法, 在原先DAO的基础上添加业务方法,形成BO对象。需要注意的是BO中的业务方法往往是针对一个实体对象的,如果需要跨越多个实体对象,则方法应该放在Service中。    

       举例来说,一个简单的银行帐户管理系统,创建帐户这个BO对象,里面可以有修改密码,取钱等业务方法(不难看出,这些方法都只对单个帐户对象进行操作)。现在需要添加一个转账方法,就应该放在Service中。   

       这里Service和BO的关系是什么样的呢?再举一例:以国家行政机关为例:粮食局负责收粮,卖种子等,建设部负责审批土地买卖,建设公路等,这都是行政部分份内的事儿。突然某地发了水灾,救灾时需要粮食局开仓放粮,建设部修建临时房屋,如何协调两个部门?就需要成立专门的救灾委员会,由救灾委员会出面对两个部分的资源进行调拨。这里两个部分就是BO,而救灾委员会就是Service。不知我的意思是否表达准确了,呵呵。     模式1的在划分Service和DAO时界限清晰,但会带来一些无必要的代码。    

      模式2的划分相对复杂,然而可以提高编码效率。   

     当然小规模的应用中,没有Service,完全是DAO或BO也是可以接受的。

3,Service和DAO的接口之有无    

      接口是一种契约,它可以有多种实现。所以接口之有无取决于具体实现是否需要多样化。如果铁定一种DAO或一种Service只有一种实现,那么抽象出接口的意义不大。然而一些大型应用或许需要DAO和Service的多种实现(比如上面例子中的帐户DAO,可能需要一种Hibernate实现、一种CMP实现和一种JDO实现),为了向上一层隐藏具体实现类,需要采用接口。   

      隐藏具体实现类的创建过程,这有两种方法:一是实用工厂方法,代价是代码量大(每个DAO和Service一个工厂)。二是使用Spring的IoC,实现依赖注入,不需要写额外的代码,这也是引入Spring的理由之二。

http://hiro.iteye.com/blog/360081
分享到:
评论

相关推荐

    Java Web三层架构的配置详解

    这层通常由Java POJO(Plain Old Java Object)或服务接口(如Spring的`@Service`)实现。配置这一层,我们需要定义服务接口及其实现,确保它们能被表现层正确调用。例如,使用Spring框架时,可以利用依赖注入...

    SSH整合实例(学生成绩管理系统)

    2. 系统架构设计:采用分层架构,包括表示层(Web层)、业务逻辑层(Service层)和数据持久层(DAO层),并为每一层创建对应的package。 3. 添加Spring支持:配置Spring的核心文件`applicationContext.xml`,定义...

    SSM框架详细阐述.pdf

    这个框架的详细阐述主要涵盖了四个层面:持久层(DAO层)、业务层(Service层)、表现层(Controller层)和视图层(View层),以及它们之间的相互联系和整合方式。 1. **持久层(DAO层)**: DAO层是数据访问对象...

    SSH三大框架整合(详细版).doc

    DAO层负责与数据库交互,Service层处理业务逻辑,ACTION层处理用户请求并调用Service。 9. **配置文件修改** - **Spring配置**:配置SessionFactory,指定hibernate.cfg.xml的位置;配置通用DAO(GeneralDao),并...

    SSM框架详细阐述.docx

    - **Service** 层位于DAO层之上,主要负责业务逻辑的处理。 - **设计模式**: - 定义业务接口。 - 实现该接口的具体类。 - 在Spring配置文件中配置接口实现类的依赖关系。 - **优点**: - 提高了业务逻辑的独立...

    基于ssh架构的学生成绩管理系统.doc

    在Spring配置文件中,我们定义了DAO层和Service层的实现类,通过DI管理这些类的实例,同时Spring还提供了事务管理功能,确保数据操作的一致性。Service层接口和实现类的创建,以及DAO层的定义都在Spring配置文件中...

    Struts2_Spring与Hibernate整合应用_学生成绩管理系统

    - 在配置文件中定义bean,如DAO层、Service层等。 4. **实现Hibernate持久层**: - 添加Hibernate相关的jar包。 - 配置Hibernate,包括`hibernate.cfg.xml`等。 - 使用Hibernate进行数据库操作,如CRUD操作。 ...

    MyClipse6.0\Struts2,Spring与Hibernate整合应用,学生成绩管理系统

    - **分层架构**:系统采用经典的三层架构,包括表示层(Web层,使用Struts2)、业务逻辑层(Service层,使用Spring)和数据访问层(DAO层,使用Hibernate)。每个层都有明确的职责,使得代码结构清晰,易于维护。 ...

    购物商场实现

    购物商城项目搭建。 第一步:创建项目 第二步:拷jar包(mybatis、mysql驱动、jstl) 放到WEB-INF/lib/下面 第三步:分层(创建包) 公司的域名反写 + ... 第九步:测试(让控制器、业务层、数据访问层三层连接起来).

    Struts2,Spring与Hibernate图文例子学生成绩管理系统.pdf

    - **分层架构**:采用MVC(Model-View-Controller)模式,将系统划分为表示层、业务逻辑层和数据持久层,分别对应Web层、Service层和DAO层,实现高内聚低耦合的设计原则。 ##### 3. Spring框架集成 - **添加Spring...

    ssh的一个整合的实例

    - **6.2 Service层实现类**:实现Service接口,通常在实现类中会调用DAO层接口。 - **6.3 依赖注入**:通过Spring的依赖注入机制注入DAO层bean。 ##### 7. 实现表示层(Action类和JSP文件) - **7.1 配置web.xml**...

    SSH框架整合[收集].pdf

    在SSH框架中,业务层Service通过调用DAO接口,间接地与数据库进行通信。 SSH框架的集成使得各层之间松散耦合,提高了代码的可读性和可维护性。在配置好`applicationContext.xml`后,Struts的Action可以直接调用...

    ssh框架模板

    开发者拿到这个SSH框架模板后,可以直接在action层编写业务逻辑,调用service层的方法,service层再通过dao层与数据库进行交互。实体类(pojo)根据实际数据库表结构进行调整,而配置文件如struts.xml、spring.xml...

    SSH框架整合[总结].pdf

    Service层封装了DAO(Data Access Object),提供业务接口给Action调用,同时Spring还支持声明式事务管理,确保了业务操作的一致性。此外,Spring还包含了AOP(面向切面编程)机制,用于事务控制和其他横切关注点,...

    SSH三大框架技术的整合应用

    7. **DAO和Service**:DAO(Data Access Object)层负责与数据库的交互,而Service层是业务逻辑处理层,它调用DAO层的方法完成业务操作。 8. **ACTION配置**:在Struts2中,ACTION类是控制器,负责接收请求,调用...

    Struts2,Spring与Hibernate整合应用,学生成绩管理系统.doc

    - 在Spring配置文件中定义Service层Bean,并注入DAO层Bean。 7. **WEB层开发** - 在`web.xml`中配置Struts2过滤器和Spring监听器。 - 配置Struts2与Spring的整合文件`struts.properties`。 - 创建所需的JSP页面...

    什么是业务逻辑

    三层架构通常指的是表示层(或称展示层)、业务逻辑层和服务层(或数据访问层)。业务逻辑层位于表示层和服务层之间,它的主要职责是处理业务规则和复杂的业务流程。 #### 表示层(View / Controller) 表示层负责...

Global site tag (gtag.js) - Google Analytics