转自: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的理由之一

DAO和service的解释的更多相关文章

  1. SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏

    SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!!   基础知识目前不够,有感性 ...

  2. java中的PO,VO,TO,BO,DAO,POJO的解释

    java的(PO,VO,TO,BO,DAO,POJO)解释  O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定 ...

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

    转自 http://blog.sina.com.cn/s/blog_4b1452dd0102wvox.html 我们都知道有了Hibernate后,单独对数据的POJO封装以及XML文件要耗损掉一个类 ...

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

    基于泛型的依赖注入.当我们的项目中有很多的Model时,相应的Dao(DaoImpl),Service(ServiceImpl)也会增多. 而我们对这些Model的操作很多都是类似的,下面是我举出的一 ...

  5. MVC三层架构编程(Dao、service、servlet 之间的关系)

    木哈哈~先开心一会儿,人生的第一篇博客aaa.我一定好好写.不过之前也没怎么看别人写过,还是有点小激动呢,加油.好好总结,会总结的宝宝才会有提高! 今天想总结一下mvc三层架构模型编程,宝宝学习不怎么 ...

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

    < Service具体解释(一):什么是Service> < Service具体解释(二):Service生命周期> <Service具体解释(三):Service的使用 ...

  7. Android服务Service具体解释(作用,生命周期,AIDL)系列文章-为什么须要服务呢?

    Android服务Service具体解释(作用,生命周期,AIDL) 近期沉迷于上班,没有时间写博客了.解衣入睡,未眠.随起床写一篇博客压压惊! ##我们android系统为什么须要服务Service ...

  8. Service具体解释(一):什么是Service

    < Service具体解释(一):什么是Service> < Service具体解释(二):Service生命周期> <Service具体解释(三):Service的使用 ...

  9. (转)代码结构中Dao,Service,Controller,Util,Model是什么意思?

    作者:技能树IT修真院链接:https://www.zhihu.com/question/58410621/answer/623496434来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

随机推荐

  1. Serializer fields

    1.导入 from rest_framework import serializers field参数 1.read_only read_only=True 表示不允许用户自己上传,只能用于api的输 ...

  2. 使用MagickNet编辑图片

            ImageMagick是一个免费的创建.编辑.合成图片的软件.它可以读取.转换.写入多种格式的图片.图片切割.颜色替换.各种效果的应用,图片的旋转.组合,文本,直线,多边形,椭圆,曲线 ...

  3. Spring:Ioc和DI

    一.摘要         本文为作者搜集的Spring关于IoC/DI相关知识的记录整理笔记.介绍了IoC(控制反转)是一种设计原则,用于降低代码的耦合度.介绍了IoC是通过BeanDefinitio ...

  4. yii2 模板twig中使用GridView::widget

    yii框架twig模板中使用GridView::widget 需要这样写: {{ grid_view_widget({ 'dataProvider': provider, 'columns': [ ' ...

  5. 使用Fiddle对夜神模拟器进行抓包的设置

    注意: 设置完后, 不开启 Fiddle 的话,模拟器就不能上网了.  可以通过再把网络配置 改回去 就可以恢复网络正常访问了 一.配置Fiddle参数设置 1.Tools->Options 2 ...

  6. jmeter的各种调用

    1. 开发将dubbo协议的接口转化成了webservices后,jmeter直接添加http请求,输入网址就好,但是这种需要增加开发测试页面的工作量 2.jmeter自身无法调用zk连接服务器(Jm ...

  7. 【转载】SQL Server中的Merge关键字

    简介 原文地址 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小 ...

  8. MongoDB、PyMongo数据操作

    MongoDB 命令 C:\Program Files\MongoDB\Server\4.0\bin mongo 客户端 mongod 服务端 mongoexport 导出 普通格式,每条记录一行,整 ...

  9. java整数溢出问题及提升为long型

    整数溢出问题 Java 中的 int 用 32 位表示,正数最大值的情况,首位是 0,其他位都可以是 1(就是 2^31-1).但是如果正数过大了,例如 2^31,计算机不得不把首位变成 1,并且计算 ...

  10. [并查集][NOIP2015]信息传递

    信息传递 题目描述 有 N 个同学( 编号为 1 到 N) 正在玩一个信息传递的游戏. 在游戏里每人都有一个固定的信息传递对象, 其中,编号为i的同学的信息传递对象是编号为ti的同学. 游戏开始时, ...