转发自:http://blog.csdn.net/njujmj/article/details/5202915
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的理由之二。
相关推荐
dao完成连接数据库修改删除...service层是面向功能的,一个个功能模块比如说银行登记并完成一次存款,UI要把请求给service层,然后service曾将这一个case分解成许多步骤调用底层的实现完成这次存款,dao就是下面那层。
DAO层_Service层_Controller层、View层的一些了解知识,帮助填充对这部分比较空白的开发者们。
在反复的做项目的过程中,是不是每次都有大量的dao和service生成(vo的) 是不是总是要复制,粘贴.本人花了一天时间写了一个小小的工具.只需配合一下vo包名即可生成所有的vo 的dao 和service (当然,您的框架和我不一样只...
java代码生成器(dao层service层)java代码生成器(dao层service层)
ftl模板自动生成dao、service层功能,包括实现... ftl模板自动生成dao、service层功能,包括实现... ftl模板自动生成dao、service层功能,包括实现... ftl模板自动生成dao、service层功能,包括实现...
采用java语言开发,原生jdbc编程,dao层和service分离,数据库采用oracle,基于servlet,jsp
Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。 一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;...
Java自动生成entity、dao、service、controller代码
二、在封装上针对Mybatis进行Dao、service层封装,里面提供两种实现机制:一种采用注解泛型动态实现cud操作,目前查询还是有缺陷;另一种机制采用xml文件形式实现dao、service、controller层封装,具体业务类只需...
action层控制层 控制业务逻辑dao层 持久层 与数据库的交互service层(biz):业务层 控制业务domain层(entity):实体层
一个增删改查的idea插件,可以根据数据库表结构,帮助您快速生成dao、service、controller等相关代码。同时支持MyBatis、JPA
基于注解的spring mvc,dao 层注解:@Repository("userDao"), entity层注解:@Entity,service层注解:@Service("userService"), action层注解:@Controller("userController") @RequestMapping("/user.do")
学习笔记-主要实现了购物系统的dao层和service层,主要是对象数据文件的读取,接口编程的学习。
Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。 一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;...
Java的dao层和service层,很不错的哦!
推荐个自动生成JAVA MVC多层代码的工具(dao,service,controller)(dao,service,controller) hibernate的hbm.xml ibatis的mapper.xml jsp文件都可以生成
View层、Controller层、Service层、Dao层的区别以及对应的功能
strut2+spring+ibatis 的ation层,service层,dao层自动生成,简单易用
生成struts2 dwr spring 配置文件和数据操作类(com.comm 中BaseDao) idao层 dao层的实现类 Service 层和IService层 总的情况为 src 下有 com.comm BaseDao com.idao pojo所在的类的接口 com.daoimlp pojo所在...
使用jsp-servlet-service-dao四层结构完成用户信息的增删改查操作,注册页面、登录页面、首页(显示所有用户)、修改页面、权限控制:不允许用户进行删除、 管理员可以删除其他用户。