DAO和service的解释

转自:http://blog.sina.com.cn/s/blog_4b1452dd0102wvox.html

我们都知道有了Hibernate后,单独对数据的POJO封装以及XML文件要耗损掉一个类(Orz意思是你需要精力写一个类)。然后,在大部分的服务中,我们又需要单独写一个Dao接口,并加个DaoImpl实现来操作数据库(好吧,再耗损2个类)。紧接着,我们发现其实Service层也要单独写一个类(再加1个)。

  一共4个类外加1个xml……这不是作死么,5个文件。人家好端端地写PHP可能在一个php页面就完成全部功能了。显然,这么分工,得项目达到一定情况下,才有其适用性的。一个初步的设想是,由运维部分的数据库管理员(Database Administrator,简称DBA)提供设计好的表,并用相关Hibernate工具生成相应的POJO类与XML文档。(DBA主要负责业务数据库从设计、测试到部署交付的全生命周期管理)。

  这样,对于开发人员来说,就可以尽情操作通过Hibernate获取的POJO类了。

  对于单独分出Dao层与Service层的一些解释:

  一个DAO单独对1个表进行操作。

  一个Service可以操作几个DAO。

分层分析:那么这就意味着在几个大型数据库操作的时候,Service就能派的上用场。是不是这样分的?对于写入数据库的数据检查,交给Dao来。对于整个逻辑判断,交给Service来,例如在这张表找到了这个id字段,在那个表没找到,所以应该拒绝这项写入更新服务。

  无论是哪种持久化存储, 数据访问对象(或称作为DAO,即Data Access Objects)通常都会提供对单一域对象的CRUD (创建、读取、更新、删除)操作、查询方法、排序和分页方法等。Spring Data则提供了基于这些层面的统一接口(CrudRepository,PagingAndSortingRepository)以及对持久化存储的实现。

Service和DAO的接口之有无

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

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

原文地址:https://www.cnblogs.com/smuxiaolei/p/9194789.html

时间: 2024-10-08 18:15:43

DAO和service的解释的相关文章

为何有DAO与Service层?为何先搞Dao接口在搞DaoImpl实现?直接用不行吗?

转自 http://blog.sina.com.cn/s/blog_4b1452dd0102wvox.html 我们都知道有了Hibernate后,单独对数据的POJO封装以及XML文件要耗损掉一个类(Orz意思是你需要精力写一个类).然后,在大部分的服务中,我们又需要单独写一个Dao接口,并加个DaoImpl实现来操作数据库(好吧,再耗损2个类).紧接着,我们发现其实Service层也要单独写一个类(再加1个). 一共4个类外加1个xml--这不是作死么,5个文件.人家好端端地写PHP可能在一

ssh Dao与Service的设计与实现

使用UML设计程序 使用 用例图 画出程序的功能模块(小人代表角色,椭圆代表功能) 第一步:画出实体类的关联关系 使用类图设计程序(关键) 单向箭头表示单向关联,没有箭头表示双向关联,线的属性(关联属性) 类的属性和方法一般隐藏 第二步:Dao的设计与实现 BaseDao定义每个Dao都会使用到的通用接口<<Interface>> BaseDaoImpl实现BaseDao的抽象类(用斜体表示抽象,用虚线空心箭头表示实现接口) 每一个实体类都会有一个Dao的实现类(用实现空心箭头表示

Service具体解释(二):Service生命周期

< Service具体解释(一):什么是Service> < Service具体解释(二):Service生命周期> <Service具体解释(三):Service的使用> <Service具体解释(四):绑定服务 与 通信> <Service具体解释(五):使用Messager进行通信> <Service具体解释(六):进程间通信-AIDL> 与Activity相似,Service也有自己的生命周期函数,在不同的时刻.系统会调用相应

基于Spring4+Hibernate4的通用数据访问层+业务逻辑层(Dao层+Service层)设计与实现!

基于泛型的依赖注入.当我们的项目中有很多的Model时,相应的Dao(DaoImpl),Service(ServiceImpl)也会增多. 而我们对这些Model的操作很多都是类似的,下面是我举出的一些(见名知意,其它自行脑补): 1.save2.saveAll3.findById4.update5.saveOrUpdate6.delete7.deleteAll8.deleteById9.loadAll10.load(int page,int rows)11.getTotalCount12.ge

Action、Dao、Service三层的功能划分

原文地址 Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只完成增删改查,虽然可以1-n,n-n,1-1关联,模糊.动态.子查询都可以.但是无论多么复杂的查询,dao只是封装增删改查.至于增删查改如何去实现一个功能,dao是不管的. 总结这三者,通过例子来解释: Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责: Service是厨师,action送来的菜单上的菜全是ta做

学习笔记dao,domain,service三层理解

1.dao层操作单表,不涉及复杂逻辑,主要是表的增删改查操作,完全根据domain的要求来查询数据,会对每个要操作的数据库表定义一个dao,对具体的操作要定义一个类似函数说明. eg: UppCodeInfo findByCodeNo(String codeNo);JPA方式 2.domain层考虑业务逻辑,例如过滤条件,放行或者返回,以及数据的处理,为调用dao层做好准备,一个domain可以调用一个或者一组相关的dao层. eg:@Entity         @Table(name = "

调查管理系统 -(4)DAO与Service层的泛型抽取与实现

1.设计 BaseDao 与 BaseDaoImpl 1)设计接口 BaseDao 每个实体都应有一个对应的Dao接口,封装了对这个实体的数据库操作.在每个Dao接口中都应有一个基本的增删改查的方法,但每个Dao接口中都写一遍就是重复的代码,可以把这些方法抽取到一个父接口中,定义为: 1 package com.atguigu.surveypark.dao; 2 import java.util.List; 3 /** 4 * BaseDao接口 5 */ 6 public interface

model、dao、 service 和Comtroll层的关系

首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操作,在这里可以编写自己需要的代码(比如简单的判断).Action层:引用对应的Service层,在这里结合Struts的配置文件,跳转到指定的页面,当然也能接受页面传递的请求数据,也可以做些计算处理.以上的Hibernate,Struts,都需要注入到Spring的配置文件中,Spring把这些联系

java的几种对象(PO,VO,DAO,BO,POJO,DTO)解释

一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对数据库的操作. 二.VO:value object值对象.通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已.但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递. 三.DAO:data access object 数据访问对象,