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 ...
随机推荐
- hdu2203 KMP水的问题
两种方法 首先是纯KMP #include<stdio.h> #include<string.h> #include<iostream> using nam ...
- AWK增强的文本处理shell特征--AWK完全手册
AWK这是一个很好的文字处理工具. 它不仅 Linux 中也是不论什么环境中现有的功能最强大的数据处理引擎之中的一个. 本文主要摘录池中龙写的Unixawk使用手冊(第二版),对当中内容略微修改.感谢 ...
- MySQL中group_concat函数-和group by配合使用
MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...
- view components介绍
view components介绍 在ASP.NET MVC 6中,view components (VCs) 功能类似于虚拟视图,但是功能更加强大. VCs兼顾了视图和控制器的优点,你可以把VCs ...
- .net4.5的弱事件
.net4.5的弱事件 没有伟大的愿望,就没有伟大的天才--Aaronyang的博客(www.ayjs.net)-www.8mi.me 1. 事件-我的讲法 老师常告诉我,事件是特殊的委托,为委托提供 ...
- Python什么是值或引用函数参数
这篇文章是Python前往遇到有疑问的功能. 下面一段是原有的基础教程Python函数. 按值传递參数和按引用传递參数 全部參数(自变量)在Python里都是按引用传递.假设你在函数里改动了參数,那么 ...
- Windows Server 2008安装 百度Wifi \ 360Wifi \ 小米Wifi 失败的解决方法
服务器管理 -> 功能 -> 安装 [无线LAN]服务
- unity3d 血液
这里的人物头像和血条是在3d世界生成的,所以有真正的纵深感和遮挡关系,废话不多说,看我是怎么实现的. 第一步.先在UI Root里制作头像和血条. 这个制作步骤基本和我前面一篇文章介绍头像血条的制作步 ...
- Redis3
Redis到底该如何利用 上两篇受益匪浅,秉着趁热打铁,不挖到最深不罢休的精神,我决定追加这篇.上一篇里最后我有提到实现分级缓存管理应该是个可行的方案,因此今天特别实践了一下.不过缓存分级之后也发现了 ...
- Asterisk 未来之路3.0_0005
原文:Asterisk 未来之路3.0_0005 第二章: Asterisk的架构 Asterisk 和其他众多传统的PBX是有区别的,拨号方案针对各种通道处理本质上采用同一种方式. 在传统的PB ...