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

个人对DAO层的一点看法

阅读更多

最近在看《expert one-on-one J2EE Development without EJB》这本书,对现在目前中国大部分软件公司都在用的三层架构的DAO层有点想法。

  个人观点认为如果用了像Hibernate这样持久化管理层后,没有多少必要还要DAO层;因为像Hibernate已经足够抽象了,完全可以直接使用它们,不需要在其上再构建一个DAO层,三层架构中,把业务逻辑层与DAO层分开的最大的好处是方便测试,可以独立测试业务逻辑层,因为这样可以很容易的模拟数据,但在中国的软件公司里,有多少公司能做到把单元测试做到这么细?一般来说都是直接进行集成测试的,或者是对业务逻辑进行单元测试,只有在不方便集成测试时,才会有单元测试,但只是少数情况。

  从DAO三层的发展来看,刚开始设计DAO层时,都是JDBC进行数据的操作,所以DAO层的价值很大,可以对不同的数据访问策略进行抽象,并转换为面向对象语言的结果集。但目前有了iBATIS和Hibernate等持久层后,DAO的价值就没有这么明显了。有人说有了DAO层后可以方便的更换数据访问的实现,比如说从JDBC换到Hibernate或是JDO,这种说法是最没有说服力的,因为一般一个项目在开始已经定好了具体的实现策略,不可能去随意的换,就算要换也会付出很大的代价,以前定义好的DAO接口也一定会改,因为JDBC和Hibernate在透明持久化和对象状态上差距太大,一个要显示的对修改的内容进行更新,一个是自动进行的;还有取数据时Lazy loading等等,很难设计出一个通用的DAO接口,就算设计出了,可能性能也是一个问题。

  所以如果系统的业务不是很复杂,比如说都是对数据的操作,这样情况是完全可以取消DAO的。我见过有些系统的源代码,业务逻辑层只是简单的又去调用一个Dao然后返回结果。。

  所有不要什么系统过来都用三层架构,要具体看自己的系统需求。

 

友财网 作者:袁平

http://www.ucai8.com/viewNote.do?noteId=402881851e9be968011eaa83fe3e0604

4
0
分享到:
评论
2 楼 zzq230 2009-01-11  
1. 单元测试很重要
2. 做产品和做项目是不一样的
1 楼 liangwenzheng 2009-01-07  
恩 合适的就是最好的:)

相关推荐

    Service层和DAO层解析

    例如,如果需要对查询结果进行修改,只需在DAO层更改SQL,Service层相应地调整调用,改动范围较小,降低了影响范围。 在实际开发中,不必拘泥于严格的分层数量,关键在于如何有效地组织代码以适应项目需求。有时候...

    C#特性标签实现通用Dao层

    在C#编程中,"通用Dao层"是一个常见的设计模式,用于封装数据库操作,使得业务逻辑层能够专注于处理业务规则,而无需关心底层数据访问的细节。本篇将重点探讨如何利用C#的特性(Attribute)标签来实现这一目标,同时...

    简单DAO层示例

    在IT行业中,DAO(Data Access Object)层是软件设计模式中的一个重要组成部分,它主要用于数据库操作,隔离了业务逻辑层与数据存储层之间的交互。在这个"简单DAO层示例"中,我们将探讨DAO的设计原则、实现方式以及...

    DAO层_Service层_Controller层、View层介绍

    DAO层_Service层_Controller层、View层的一些了解知识,帮助填充对这部分比较空白的开发者们。

    action层,dao层 ,service层,entity层1

    Service层通常会调用DAO层来完成数据的读写,并对多个DAO操作进行组合,以实现复杂的业务流程。此外,Service层还可以处理事务管理,确保数据的一致性。这一层与Action层交互,提供业务服务,与DAO层交互,完成数据...

    SpringBoot 多模块Dao层单元测试

    Dao层主要负责与数据库交互,因此它的单元测试通常涉及对数据库操作的模拟,而无需实际连接到数据库。 1. **配置多模块项目** 在IDEA中,创建多模块Spring Boot项目时,我们需要定义一个主模块(parent)以及若干...

    dao层基类dao层基类dao层基类

    dao层基类dao层基类dao层基类dao层基类dao层基类

    dao层自动生成

    在IT行业中,DAO(Data Access Object)层是软件设计模式中的一个重要组成部分,它主要用于封装对数据库的操作,使得业务逻辑层与数据访问层解耦。"DAO层自动生成"这一技术旨在提高开发效率,减少手动编写重复代码的...

    mybatisDAO层自动生成插件

    MyBatis DAO层自动生成插件是一个非常实用的工具,它极大地简化了开发过程中DAO(Data Access Object)层的编写工作。MyBatis是Java领域的一款流行持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,使得...

    Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合

    本文主要探讨Spring如何贯穿整个中间层,将Web层、Service层、DAO层以及PO(Plain Old Java Object)无缝整合起来。 #### 二、Spring框架的关键作用 1. **无缝整合**:Spring框架的一个显著特点是能够将不同的技术...

    javadao层的编写

    Java的dao层和service层,很不错的哦!

    基于Annotation并对DAO层封装具有分页功能的S2SH整合实例

    在这个基于Annotation并对DAO层封装具有分页功能的S2SH整合实例中,我们将探讨如何利用这些技术的特性来提高开发效率和代码可维护性。 首先,让我们深入了解一下Struts2。Struts2是基于MVC模式的开源Web应用框架,...

    图书管理系统DAO层代码

    在IT行业中,数据库访问对象(DAO)层是软件设计中的一个重要组成部分,特别是在Java开发中。DAO层主要用于处理数据存储和检索,它隔离了业务逻辑层与数据库交互的细节,使得代码更加灵活和可维护。本项目是关于一个...

    dao自动生成工具 基于ibator 只需要设置少量参数就能 创建dao层所有类

    ibator-huoniao通过它你可以通过配置少量参数,通过一键生成dao层的全部文件,能够应付对dao层的所有操作 产物包括: 1. pojo文件 2. dao接口类 3. dao接口实现类文件 4. ibatis sql map文件 5. 数据库查询时...

    项目model、Dao层、业务层建模工具类

    首先,"model"层通常指的是领域模型(Domain Model),它是业务逻辑的核心,包含了对应用中实体和业务规则的抽象。在Java应用中,model类通常用来封装数据,定义业务操作方法,以及实现业务逻辑。建模工具类在此层的...

    经典泛型dao层代码,非常好用简易

    然后,利用Spring的依赖注入(DI)特性,可以在Service层或其他组件中轻松注入泛型DAO的实例,从而实现对数据库的操作。 #### 结论 泛型DAO层为SSH框架下的数据访问提供了统一、高效且灵活的解决方案。通过上述...

    生成mybatis的实体类+dao层+xml层

    DAO层是访问数据库的接口,定义了对数据的操作方法。而XML文件则包含了SQL语句,与DAO接口方法一一对应,定义了具体的数据库操作逻辑。 在这个过程中,我们可能使用到的工具有MyBatis Generator或者IDEA等集成开发...

    DAO与三层结构

    业务逻辑层调用数据访问层的DAO对象来操作数据,然后对结果进行处理,最终返回给表现层。`Chapter2_DAO与三层结构.ppt`可能会详细讲解这部分内容。 3. 数据访问层:这一层包含DAO对象,负责与数据库的交互,执行SQL...

    泛型通用DAO,可以很简化DAO层的代码

    在Java编程领域,DAO(Data Access Object)模式是一种常见的设计模式,用于封装对数据库的操作,以解耦业务逻辑层和数据存储层。泛型通用DAO是这种模式的一种优化,它利用了Java 5.0引入的泛型和反射机制,大大简化...

    web应用dao层的开发经验小结

    DAO层的主要任务是提供对数据库的操作接口,包括增删查改等基本操作,同时处理SQL语句的编写、事务管理以及异常处理。通过这种方式,业务层可以专注于业务逻辑,而无需关心底层数据访问的实现。 2. 设计模式 DAO...

Global site tag (gtag.js) - Google Analytics