Spring的Service层与Dao层解析
本文转载于网络,觉得写得很透彻。
dao完成连接数据库修改删除添加等的实现细节,例如sql语句是怎么写的,怎么把对象放入数据库的。service层是面向功能的,一个个功能模块比如说银行登记并完成一次存款,UI要把请求给service层,然后service曾将这一个case分解成许多步骤调用底层的实现完成这次存款,dao就是下面那层。
dao就是把数据存起来,之所以service的方法会有雷同只不过是因为service得需求不是很复杂不用再service里面完成太多包装或者处理过程可以直接调用dao的方法就完成的请求处理例如就要save一个对象,而这个对象是封装好的,dao里面有个方法专门save封装好的对象于是service的方法就仅仅调用一下就o了,函数签名自然很像了service不能直接接触持久层,而dao是持久层或者直接访问持久层有的时候只是为了分层清楚,为了将来scale up的时候方便我们才把service和dao分开,其实没必要分开的。
---------------------------------------------------------------
根据不同项目的复杂度来确定是否需要分层,如果是小项目的话,2层应该就够了,分层是为了很好的解耦,和程序的可观性,还有就是很好的项目分工,如果遇到某个客户需要修改某个查询结果集合,你需要修改的首先是dao的SQL,接着是service的相应调用方法来为VIEW服务,
如果是分层清楚的话,只需要在DAO中加一个方法,在SERVICE中改变起调用的方法接口,需要改动的不大,
-----------------------------------------------------------------
在用ssh进行开发中,一般情况下都是分为三层:web层spring层dao层,基本的流程是首先定义一个dao接口,然后去实现这个接口,在定义同类型的service接口(service接口与dao接口是完全一样),再实现service接口,(这是是用dao接口去注入),然后web层在去调用service层。
DAO层的职责是纯粹的数据操作,
如果是hibernate,
那就只需要类似getHibernateTemplate().save, update, delete, findyBy*这类的方法而service层是负责写业务逻辑的, 纯粹的业务逻辑, 其中的数据操作是通过注入的DAO实现的, 但是业务是在这层。
如果你的service层与dao层代码严重重复,这说明你的业务比较简单。复杂业务这个结构的优势就很明显了service层的作用是对dao取得的数据做操作
更贴近于业务的实现 dao只是数据的增删改查,对小型的应用来说,SSH 确实提高了开发成本和开发周期,但是却有利于扩展和维护。
利用spring 的ioc 解偶
使业务逻辑与持久层松偶合。
-----------------------------------------------------------------
分层并不一定是绝对的,具体的还是要根据项目实际情况来定,不是么?如果是理想状态的话,恐怕在你的service层上面还要再多加一层的。但是你觉得有必要吗?
实际上,对于小项目来说,直接通过dao来进行操作也不是不可以,搞得太复杂,也没有必要。这是我的个人感觉。就好像po和dto一样,有的人直接就将po传到web层,有的还要加一个转换,由dto进行数据传递。显然后者实现更理想,但是你不觉得这样很麻烦吗。
微软的。net号称有11层(还是多少层来着,反正层很多),但是实际能分出多少层,还是根据开发者自己情况来定了。要注意代码是死的,人是活的,不要死套框架,否则自己很可能也会陷入开发误区。
另外,我们目前设计的一些领域对象,绝大多数都是贫血的。只是一个简单的javabean,不包含任何逻辑在里面。怎么设计才更符合oo的思想,你也可以参考下domain object方面的讨论。这个在javaeye上有很多。
Spring的Service层与Dao层解析的更多相关文章
- java中Action层、Service层和Dao层的功能区分
Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...
- [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...
- Java中Action层、Service层、Modle层和Dao层的功能区分
一.Java中Action层.Service层.Modle层和Dao层的功能区分: 首先,这是现在最基本的分层方式,结合了SSH架构. modle层就是对应的数据库表的实体类.(即domain) Da ...
- Action层, Service层 和 Dao层的功能区分
Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO ...
- 系统管理模块_部门管理_改进_抽取添加与修改JSP页面中的公共代码_在显示层抽取BaseAction_合并Service层与Dao层
系统管理模块_部门管理_改进1:抽取添加与修改JSP页面中的公共代码 commons.jspf <%@ page language="java" import="j ...
- 利用工厂模式实现serviec层和dao层解耦
利用工厂模式实现serveice和dao层的解耦,这样就可以不用在service层实例化dao层的对象,当dao层代码发生改变的时候(数据库实现发生改变)直接修改配置文件就不用改变service层的代 ...
- spring事务到底用于service层还是dao层
Spring事务为业务逻辑进行事务管理,保证业务逻辑上数据的原子性. 事务得根据项目性质来细分:事务可以设置到三个层面(dao层.service层和web层). 第一:web层事务,这一般是针对那些安 ...
- 基于Spring4+Hibernate4的通用数据访问层+业务逻辑层(Dao层+Service层)设计与实现!
基于泛型的依赖注入.当我们的项目中有很多的Model时,相应的Dao(DaoImpl),Service(ServiceImpl)也会增多. 而我们对这些Model的操作很多都是类似的,下面是我举出的一 ...
- JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操作,在这里可以编写自己需要的代码(比如简单的判断).Action层:引用对应的Servi ...
随机推荐
- .net mvc4 从客户端中检测到有潜在危险的 Request.Form 值
[ValidateInput(false)] 即可, 网上说什么Web.Config 里面改,一点用都没有 [HttpPost] [ActionName("Edit")] [Val ...
- MVC验证12-使用DataAnnotationsExtensions对整型、邮件、最小值、文件类型、Url地址等验证
原文:MVC验证12-使用DataAnnotationsExtensions对整型.邮件.最小值.文件类型.Url地址等验证 本文体验来自http://dataannotationsextension ...
- Oracle中的二进制、八进制、十进制、十六进制相互转换函数
原文:Oracle中的二进制.八进制.十进制.十六进制相互转换函数 Oracle中的二进制.八进制.十进制.十六进制相互转换函数 今天在网上看到一篇关于在oracle中对各种进制数进行转换的帖子, ...
- Backbone入门
Backbone入门讲解 Backbone是一个实现了web前端mvc模式的js框架. 一种解决问题的通用方法,我们叫做模式. 设计模式:工厂模式,适配器模式,观察者模式等,推荐js设计模式这本书.设 ...
- leetcode [64] merge tow sorted lists
之前忘记记录这题了,现在补上. 合并两个有序的list,要求是: Merge two sorted linked lists and return it as a new list. The new ...
- js面向对象学习总结
1.函数作为参数进行传递 function a(str,fun){ console.log(fun(str)) }; function up(str){ return str.toUpperCase( ...
- SVG 学习(二)--- 创建组合交互式应用
接着上一节的内容,本次学习主要介绍SVG组合式应用以及js交互式应用! 1.组合式应用 绘制两棵带有投影效果的树! <svg width="400" height=" ...
- OWIN产生的背景以及简单介绍
OWIN产生的背景以及简单介绍 随着VS2013的发布,微软在Asp.Net中引入了很多新的特性,比如使用新的权限验证模块Identity, 使用Async来提高Web服务器的吞吐量和效率等.其中一个 ...
- Xamarin.Android学习之应用程序首选项
Xamarin.Android学习之应用程序首选项 一.前言 任何App都会存在设置界面,如果开发者利用普通控件并绑定监听事件保存设置,这一过程会非常的枯燥,而且耗时.我们可以看到Android系统的 ...
- GIT+云盘作 做 文档管理工具
GIT+云盘作 做 文档管理工具 在工作中, 会遇到公司的文档 和 自己家里的 文档进行同步的问题, 通常我们使用U盘作为传输节制, 但是不是非常好,文档的改动都不能发现, 导致回家同步的时候, 出各 ...