`
s929498110
  • 浏览: 106594 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DAO和Service分层之愚见

阅读更多

 

今天在鼓捣自己的小项目时候,突然想到了为什么要在这么一个项目中使用明明如此神似 的DAO层和Service层

自从大一暑假步入J2EE神殿以来,经常都是学习如何做而很少思考为什么这么做(不够深入还是硬伤啊。。。),于是乎就网上查找各种前辈们的见解和资料。 经过整理和思考, 对这个问题好像有了点自己的想法,但是又不知道自己的想法是否合理,又于是乎发在这个大牛云集的地方,想倾听一下大家的意见

 

以下是自己的看法:

 

DAO 面向事务和持久层 。 它实现 完成 连接数据库 CRUD 等的 底层 细节
Service 面向功能 和业务逻辑 。 它通过 调用一个或多个DAO 中的功能点 (方法 ) 来组合成为 一个复杂的 业务逻辑

 

 

    在大多数情况下, DAO层与 Service 看起来会有很大的雷同。这是因为在大多数情况下 Service 的需求不是很复杂,在 Service 里面不需要完成过多的包装处理就可以直接调用 DAO 的方法执行数据请求处理,比如 Save Delete Update Select 等。 然而为了项目各层的松耦合、扩展性,在开发中 Service 一般不能直接接触持久层 ( 数据库 ) ,必须通过 DAO 访问持久层。

       有的时候只是为了分层清楚,为了将来scale up 的时候方便我们才把 service dao 分开,其实没必要分开的 。在 小规模的应用中,没有Service ,完全是 DAO BO 也是可以接受的。 但是开发人员总是追求更远大的目标,总是希望现在开发的项目在将来能够可持续发展,因此 DAO Service 分层也就显然合理了

 

 

我总是乐于帮助需要帮助而我力所能及的人。 希望大牛们路过,发现小弟这个有什么问题或者有其他的见解发出来让小弟见识见识哈

 

========================================================================================

 

 

我感觉很在理的一些见解 写道
1、dao只面向持久层,事务层应该在service层。
2、service层面向事务和业务逻辑,一个业务不仅可以调用多个dao,也能调用多个service完成业务功能。 事务一般不会在DAO层,一般在Control中。或者在service中!
3、DAO层面的目的是试图在表结构发生变化的时候尽量去少改动代码。 这些东西对于一次性的项目或许是没什么意义的。但是如果产品存在扩展和完善的需求,这样做的目的就显现出来。 只所以分层的设计思想在很多时候并没有体现出优势,主要原因就是规划和设计不足导致。

 

分享到:
评论
28 楼 wuhoufeng 2011-04-06  
因为你还没吃到过 这么做的苦 等你痛苦的时候就明白了。所有代码写完如果都不需要你维护,那可以随便怎么写
27 楼 ximencf 2011-04-06  
如果是我,我还分Dao、Logic、Services层。
Logic是对Dao的封装
services是对逻辑的封装和对外的统一业务接口。

当然,这个分层视系统的复杂度、业务粘合度、系统耦合度而定。

Jsp写Dao又不是没有过。
26 楼 akunamotata 2011-04-06  
jansel 写道
事务还是放在Action层吧,因为一个Action里面会可能调用多个Service。当然,如果你的Service层做的很厚,那么事务可以放在Service层的。

另外Action-Service-Dao这些经常是信息管理系统使用,别的系统不一定会这样使用的,可能Service层都会分好几层呢。


这个问题碰到过,事务在service层上,然后一个action调用了多了service,结果就比较悲催,后来另外写了一个service,action只调这个service,我是这么解决的,但是觉得这个service的用途就有点含糊,不是很清晰。没试过放action层上面,不知道会有什么问题么...
25 楼 HelloJimmy 2011-04-06  
大学里还是好好学习下数据结构、操作系统等基础知识吧。。。。。框架什么的,这些都是浮云,工作中慢慢理解。
24 楼 linliangyi2007 2011-04-06  
看到 事务放在DAO层,哥就蛋疼了~~~

楼主需要继续努力啊!!多做几个项目,多改改代码,就明白了,真的!


分层不是靠想出来的,分层是靠改出来的。
23 楼 jansel 2011-04-06  
事务还是放在Action层吧,因为一个Action里面会可能调用多个Service。当然,如果你的Service层做的很厚,那么事务可以放在Service层的。

另外Action-Service-Dao这些经常是信息管理系统使用,别的系统不一定会这样使用的,可能Service层都会分好几层呢。
22 楼 s929498110 2011-04-06  
371937605 写道
事务 还是在 Service 上控制比较好,跨数据库这样的jta事务控制起来会更方便一些.


恩。 明白了。 谢谢 
21 楼 371937605 2011-04-06  
事务 还是在 Service 上控制比较好,跨数据库这样的jta事务控制起来会更方便一些.
20 楼 akunamotata 2011-04-06  
s929498110 写道
yangguo 写道
s929498110 写道
yangguo 写道
你可以连dao层也不要,直接在action上访问数据库。
或者连action都不要,直接在jsp上面写逻辑。
看你开发的什么。


  
汗啊。 老兄你这个看起来怎么那么奇怪呢


看起来奇怪的话,只能说明你还没入门。


好吧, 绝世高人。。。
或许“直接在jsp上面写逻辑” 是J2EE的最高境界
俺这个凡夫俗子还真没入门



这个叫返璞归真
19 楼 ak121077313 2011-04-06  
银行转账 是最基本的业务逻辑。
service为事务服务,事务需要出错的时候回滚,一个业务需要多次操作DAO层。

如果根本就不需要回滚,service就是一个普通的封装层
18 楼 s929498110 2011-04-06  
yangguo 写道
s929498110 写道
yangguo 写道
你可以连dao层也不要,直接在action上访问数据库。
或者连action都不要,直接在jsp上面写逻辑。
看你开发的什么。


  
汗啊。 老兄你这个看起来怎么那么奇怪呢


看起来奇怪的话,只能说明你还没入门。


好吧, 绝世高人。。。
或许“直接在jsp上面写逻辑” 是J2EE的最高境界
俺这个凡夫俗子还真没入门
17 楼 Craft 2011-04-06  
五六年前讨论的话题了
16 楼 wxlmcqueen 2011-04-06  
j2ee 怎么是殿堂。明明混水一坛
15 楼 icefire 2011-04-06  
建议翻翻老帖,这些问题都被讨论烂了!
14 楼 yangguo 2011-04-06  
s929498110 写道
yangguo 写道
你可以连dao层也不要,直接在action上访问数据库。
或者连action都不要,直接在jsp上面写逻辑。
看你开发的什么。


  
汗啊。 老兄你这个看起来怎么那么奇怪呢


看起来奇怪的话,只能说明你还没入门。
13 楼 s929498110 2011-04-06  
beyondsc 写道
早就上过当了, 还在被这些破东西骗啊?


 
表示朋友你说的话。 小弟不太明白啊。。。

我就是想看看对DAO和Service之间的分层和解耦合理解的是否有问题,希望各路高手评论一下而已额
12 楼 s929498110 2011-04-06  
yangguo 写道
你可以连dao层也不要,直接在action上访问数据库。
或者连action都不要,直接在jsp上面写逻辑。
看你开发的什么。


  
汗啊。 老兄你这个看起来怎么那么奇怪呢
11 楼 beyondsc 2011-04-06  
早就上过当了, 还在被这些破东西骗啊?
10 楼 s929498110 2011-04-06  
tom&jerry 写道
s929498110 写道
horse88sky 写道
引用
DAO层 面向事务和持久层 。 它实现 完成 了 连接数据库 CRUD 等的 底层 细节

dao只面向持久层,事务层应该在service层。
引用
Service层 面向功能 和业务逻辑 。 它通过 调用一个或多个DAO 中的功能点 (方法 ) 来组合成为 一个复杂的 业务逻辑

service层面向事务和业务逻辑,不仅可以调用多个dao,也能调用多个service完成业务功能。

ps:这个没有什么好讨论的,基本上有两派。多数派为service和dao分层。少数派为不分。你选哪一派呢?


多谢指定!
   我也不是讨论。 就是想加深一下自己的知识见解、 还有就是抛砖引玉 
引用

service层面向事务和业务逻辑,不仅可以调用多个dao,也能调用多个service完成业务功能。

这个确实是这个意思
引用

事务层应该在service层

这个该怎么理解额  
Transaction和Session不是都在DAO层的吗?


举个例子:银行转账,一账户增,一账户减,DAO里是对某个账户的操作,在Service里要两次调用DAO(一账户增加,一账户减少),这两次操作要么都完成,要么都不完成,所以事务一般来讲是在Service里的。


  明白了。一次事务里面可能有多次会话、即一个Service里面可能有多个DAO
   谢谢!
9 楼 yangguo 2011-04-06  
你可以连dao层也不要,直接在action上访问数据库。
或者连action都不要,直接在jsp上面写逻辑。
看你开发的什么。

相关推荐

    自动生成dao,service

    标题 "自动生成DAO和服务层代码" 指的是在软件开发过程中使用自动化工具来快速创建数据访问对象(DAO)和业务服务层(Service)的代码。这种做法可以显著提高开发效率,减少手动编写重复代码的时间,使开发者能够更...

    快速生成dao、service、controller等相关代码

    这个过程通常涉及编写DAO(Data Access Object)、Service和Controller层的代码,这些是软件架构中的核心组件。"快速生成DAO、Service、Controller等相关代码"的标题和描述暗示了一个针对这种情况的解决方案,即一个...

    怎样区分Action, Service 和 Dao功能.

    区分Action、Service和Dao功能 在软件开发中,Action、Service和Dao都是常用的架构模式,但是很多开发者对这些概念的理解和使用却存在一定的混淆。因此,本文将对Action、Service和Dao的功能进行详细的区分和解释。...

    基于MAVEN的SpringMVC+Mybatis整合及dao、service强封装

    另一种机制采用xml文件形式实现dao、service、controller层封装,具体业务类只需继承就可实现基本的CRUD操作,整个工程导入即可运行(一个月心算之作,稍贵一点,下载以后大部分资料都不需要看了)

    一次性生成dao和service层

    在反复的做项目的过程中,是不是每次都有大量的dao和service生成(vo的) 是不是总是要复制,粘贴.本人花了一天时间写了一个小小的工具.只需配合一下vo包名即可生成所有的vo 的dao 和service (当然,您的框架和我不一样只...

    Service层和DAO层解析

    在分层架构中,Service层和DAO层的解耦是非常重要的。Spring框架通过依赖注入(Dependency Injection,DI)实现了这一目标,使得Service层可以通过接口引用DAO层的实现,而不是直接创建DAO实例。这增强了系统的可...

    hibernate4 通用dao,service

    标题中的“hibernate4 通用dao,service”指的是在Java开发中使用Hibernate框架实现的通用数据访问对象(DAO)和业务服务层(Service)。Hibernate是一个流行的对象关系映射(ORM)工具,它允许开发者使用面向对象的...

    Java自动生成entity、dao、service、controller代码

    Java自动生成entity、dao、service、controller代码

    一个通用的dao和service包

    service接口 package com.erp.service; ... import ...这样只需要向dao中注入pojo的完整包名,你就能拥有一个pojo的dao,并且在你的service接口和实现类里不用写一句代码. 轻松持久化你的entity pojo

    java代码生成器(dao层service层)

    Java代码生成器是一种工具,主要用于自动化编程过程中重复性较强的部分,比如DAO(数据访问对象)层和服务(Service)层的代码编写。DAO层是应用程序与数据库交互的主要接口,而Service层则封装了业务逻辑,两者在...

    dao+service+servlet+jsp实现留言板(添加、查看)

    本项目采用DAO(数据访问对象)、Service层以及Servlet和JSP技术,按照MVC(模型-视图-控制器)模式来实现留言板功能,包括留言的添加和查看。 1. **MVC模式**: MVC是一种广泛应用于Web应用开发的设计模式,它将...

    SSM框架下基本的mapper,dao,service,controller等相关文件的整理

    在SSM框架中,mapper、dao、service、controller等相关文件是非常重要的组件,它们之间的关系和调用顺序非常关键。下面,我们将对这些组件进行详细的解释和整理。 Mapper文件 Mapper文件是MyBatis框架中的一个核心...

    Web服务器端在Action、dao、service之外实现spring注入

    我们在开发过程中经常会发生spring注入错误或失败的情况,其实Web服务器端在Action、dao、service包之内是很容易实现的,在这些包之外实现spring注入就不容易了,总是出错,其实根本原因是无法获得相应的spring上...

    dao.rar_DAO用法_dao_分层增删改

    在"dao模式"这个压缩包里,你可以找到实现这些功能的具体代码示例,这将帮助你理解如何在实际项目中应用DAO模式进行分层设计和数据库操作。学习这些示例,你将能够更好地掌握如何在Java或其他支持DAO模式的编程语言...

    Servlet使用MVC模式(Dao\Service\Servlet)增删查改

    在这个名为"Servlet使用MVC模式(Dao\Service\Servlet)增删查改"的小程序中,我们将深入探讨如何利用这些组件来实现对MySQL数据库的操作。 **模型(Model)** 模型层是应用程序的核心,负责处理业务逻辑和数据访问...

    数据库表生成domain,dao,service,controller工具

    数据库表生成domain, DAO, service, controller工具是一种高效开发辅助软件,主要针对Java Web应用程序开发。这类工具的主要目的是简化从数据库模型到应用层代码的转换过程,帮助开发者快速生成符合MVC(Model-View-...

    采用Java Servlet +Service+DAO实现用户登陆注册

    采用Service+Service+DAO实现用户注册登陆 数据库:SQLite 代码:JSP 目的要求 (1)掌握Servlet使用技术; (2)掌握开发平台的分层技术;...(1)Servlet+Service+DAO开发模式的理解; (2)DAO的封装。

    .DAO分层思想

    DAO(Data Access Object)分层思想是软件设计模式中一种常用的数据访问模式,它主要用于将业务逻辑与数据访问逻辑分离,提升代码的可维护性和可扩展性。在C#编程中,DAO层扮演着关键角色,它使得应用程序可以与...

    新闻发布系统设计思路(Dao与service)

    本文将围绕"新闻发布系统设计思路(Dao与service)"这一主题,深入解析DAO(Data Access Object)层和服务(Service)层的设计与实现。 DAO层是数据库访问层,其主要职责是处理与数据库的交互,包括数据的读取、写入...

Global site tag (gtag.js) - Google Analytics