`
wm920
  • 浏览: 81555 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DAO的一个讨论问题

阅读更多
总结:今天在对Action的业务类的方法实现时候,想了又想,为什么在一个Action里面写那么多实现方法对数据库的操作(select,update.....)而且每一个Action都要对应一个DAO的实现方法,每一个DAO的实现方法对对应的数据库的中唯一的一张表,为何不可把Action的对数据库的操作方法写在一个整合的DAO里面呢,在这个整合的DAO里面有的Action对数据库操作的各类的方法,而Action就做全面的数据的转发和JSP页面的跳转工作,当每次对JSP页面操作的时候,(select,update等)都会向整合的DAO执行操作,这个整合的DAO通过产生临时的ID字段负责的全程的对数据库的操作<select,update等>,整合的DAO进行逻辑的判断,进行相关的业务操作,在向不同的DAO的转发,然后在通过不同的DAO对映的数据库表进行操作。请问有人想个这个方法么,就是多张表,每一张表对应的一个DAO的实现类,在通过一个整合DAO实现方法对每个DAO的实现方法的整合,也就是1:n的关系(dao对多个dao的整合)通过整合dao的进行判断执行相关的操作,假如是表关联的话,通过临时字段的ID号判断,要进行那个DAO的操作(表),这样从而减少了Action里面有很多的业务实现方法,对数据库而言,就只有一次性的操作。从而大大的提高数据库的性能效率,有人这样做过么·? 请那个大人物指点下!谢谢
分享到:
评论
21 楼 tibetjungle 2008-07-19  
wm920 写道
总结:今天在对Action的业务类的方法实现时候,想了又想,为什么在一个Action里面写那么多实现方法对数据库的操作(select,update.....)而且每一个Action都要对应一个DAO的实现方法,每一个DAO的实现方法对对应的数据库的中唯一的一张表,为何不可把Action的对数据库的操作方法写在一个整合的DAO里面呢,在这个整合的DAO里面有的Action对数据库操作的各类的方法,而Action就做全面的数据的转发和JSP页面的跳转工作,当每次对JSP页面操作的时候,(select,update等)都会向整合的DAO执行操作,这个整合的DAO通过产生临时的ID字段负责的全程的对数据库的操作<select,update等>,整合的DAO进行逻辑的判断,进行相关的业务操作,在向不同的DAO的转发,然后在通过不同的DAO对映的数据库表进行操作。请问有人想个这个方法么,就是多张表,每一张表对应的一个DAO的实现类,在通过一个整合DAO实现方法对每个DAO的实现方法的整合,也就是1:n的关系(dao对多个dao的整合)通过整合dao的进行判断执行相关的操作,假如是表关联的话,通过临时字段的ID号判断,要进行那个DAO的操作(表),这样从而减少了Action里面有很多的业务实现方法,对数据库而言,就只有一次性的操作。从而大大的提高数据库的性能效率,有人这样做过么·? 请那个大人物指点下!谢谢

感觉这是少业务逻辑层的问题。为什么action要直接访问dao?dao层中为什么要加那么多的逻辑判断?如果action和dao间加一层service,有service执行逻辑判断,是不是可以避免这个问题?而且这样可以控制变化的影响范围。
20 楼 rihoonet 2008-07-18  
javaAK 写道
rihoonet 写道

那不是DAO模式的好处,是你分层分得好。。

有点可笑 DAO 不是分层分得好 那怎么会这么流行呢?

你才可笑,题目都没有看懂。。。。
19 楼 不是流氓 2008-07-18  
上个星期之前我就在action里面直接使用DAO层,没分业务逻辑层(刚刚开始工作,经验少),结果经理要改需求,我是拆了东墙补西墙,结果搞的提心吊胆,每天都担心是不是哪块又要出现问题了,那种感觉真郁闷..
建议action和DAO的中间加上业务逻辑层,我想会好过很多,至少改的时候麻烦很少,其他的地方不动,改些简单的地方就行了

个人的感觉,下面继续拍砖吧
18 楼 javaAK 2008-07-18  
rihoonet 写道

那不是DAO模式的好处,是你分层分得好。。

有点可笑 DAO 不是分层分得好 那怎么会这么流行呢?


17 楼 johnnylzb 2008-07-18  
laiseeme 写道
一直用一个basedao  不过用的是hibernate,一个通用的dao里面包括了一些基本的查询,添加修改删除等等,各个模块dao继承这个basedao,有这个模块相对个性的查询就写到这里面,通用的查询等等就调用basedao里面的方法


这种做法很好,我一向也是这样用,同时把BaseDAO设计成支持泛型,就更加通用和严谨。当然BaseDAO要是接口,把实现屏蔽起来。
16 楼 johnnylzb 2008-07-18  
sunsong 写道
rihoonet 写道
DAO模式,我觉得太难用了,表结构一改,好多的地方都要改。

那应该是你没有理解DAO模式的好处,如果你分层分得好,即使表结构修改,你要修改的类也是限定于某一个或者几个层里面,另外一些层次,不受影响。
搂主的想法是对的,其实就是应该在设置一个业务逻辑层
比如Jsp->Action->Bussiness->Dao->PO


同意,其实我在面试的时候也问过很多程序员,他们大多数没有把DAO模式的真正作用和思想讲出来,只是说DAO是个数据访问对象,其实可以查阅一下java.sun.com的Blueprint的J2EE Design Pattern Catalog,里面对DAO有精确严谨的描述,DAO出现就是为了向上层屏蔽底层的访问逻辑,设计上来讲,上层关心的只是增删改查,并不关心你底层是用什么持久化策略(内存、数据库、文件、JMS,如果是数据,是MySQL还是Oracle还是其他,还是使用Hibernate,iBatis等ORM),只有做到这样,底层持久化实现的变化才不会影响上层,所以,把SQL语句暴露到DAO的方法签名上,事实上DAO已经变成傀儡了,同样,如果底层用了Hibernate,把与HIbernate有关的东西,如HQL,Query接口等暴露到你的DAO方法签名上,DAO也成为傀儡。
15 楼 dinghong8614 2008-07-18  
现在还有人把和数据库的操作写在页面上啊????
14 楼 Joo 2008-07-18  
范型DAO坛子上不少人都给出源代码过,搜一下吧
但是不知道在持久操作量比较高的情况下,大量利用范型DAO的反射功能会不会存在性能问题。而一般DAO那样的EntityDAO的方法利用多态的运行时动态决定类型貌似要更好一点
13 楼 laiseeme 2008-07-18  
你可以找找hibernate的泛型dao或者不用泛型dao也可以
12 楼 laiseeme 2008-07-18  
一直用一个basedao  不过用的是hibernate,一个通用的dao里面包括了一些基本的查询,添加修改删除等等,各个模块dao继承这个basedao,有这个模块相对个性的查询就写到这里面,通用的查询等等就调用basedao里面的方法
11 楼 kane_zhang 2008-07-17  
能适合项目就好了,任何模式,都只是大家对事物的理解方式不同而已。
10 楼 Joo 2008-07-17  
action跟DAO中间少了一层业务逻辑层阿,按照我们自己的话叫BusinessUnit
最近正在设计一个小型通用的权限模型
过几天整理好了po上来大家看看
9 楼 sunsong 2008-07-17  
rihoonet 写道
Delphi读取和提交数据就很简单。。

我以前也用的Delphi,你的感受我很明白,delphi为程序员考虑的太周到了,用起来的确那叫一个爽。
不过用多了Java,会发现使用Java,能够让人真正使用面向对象的思维去考虑问题,要做的事情多了,但是层次上去了。有些体力活该干的还得干,多从设计的角度去考虑,我想会有新的收获。
8 楼 rihoonet 2008-07-17  
Delphi读取和提交数据就很简单。。
7 楼 sunsong 2008-07-17  
rihoonet 写道
加一个字段、或给字段重命名,是不是DAO里面的接口申明和和实现方法全部都要改?

修改字段是开发过程中难免的,但是你提供给表示层的接口应该是相对固定的。
你如果只需要修改PO、和DAO中有限的几个方法,这种修改的工作,很正常啊?如果说修改了一个字段,你的对外接口就要变化,只能说你设计的有问题。
6 楼 rihoonet 2008-07-17  
加一个字段、或给字段重命名,是不是DAO里面的接口申明和和实现方法全部都要改?
5 楼 sunsong 2008-07-17  
rihoonet 写道
sunsong 写道

那应该是你没有理解DAO模式的好处,如果你分层分得好,即使表结构修改,你要修改的类也是限定于某一个或者几个层里面,另外一些层次,不受影响。


那不是DAO模式的好处,是你分层分得好。。

你把你说的“表结构一改,好多的地方都要改”的问题说具体一点,最好是贴出代码来,看看是不是DAO模式的问题?
4 楼 rihoonet 2008-07-17  
sunsong 写道

那应该是你没有理解DAO模式的好处,如果你分层分得好,即使表结构修改,你要修改的类也是限定于某一个或者几个层里面,另外一些层次,不受影响。


那不是DAO模式的好处,是你分层分得好。。
3 楼 sunsong 2008-07-17  
rihoonet 写道
DAO模式,我觉得太难用了,表结构一改,好多的地方都要改。

那应该是你没有理解DAO模式的好处,如果你分层分得好,即使表结构修改,你要修改的类也是限定于某一个或者几个层里面,另外一些层次,不受影响。
搂主的想法是对的,其实就是应该在设置一个业务逻辑层
比如Jsp->Action->Bussiness->Dao->PO
2 楼 rihoonet 2008-07-16  
DAO模式,我觉得太难用了,表结构一改,好多的地方都要改。

相关推荐

    java 基于泛型与反射的通用 DAO

    本文将深入探讨如何结合这两种技术实现一个通用的DAO(Data Access Object)设计模式。 首先,我们来看“泛型”。泛型是Java 5引入的新特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的类型安全性和...

    数据库dao操作jdbc

    DAO设计模式的核心思想是创建一个接口或抽象类,代表特定的数据对象,然后实现这个接口或抽象类来处理与数据库的交互。在Java中,通常会为每个数据库表创建一个DAO类,用于执行CRUD(Create、Read、Update、Delete)...

    《J2EE核心模式》(DAO模式)

    它通过创建一个接口或抽象类来封装对数据库的访问操作,使得业务对象可以不直接与数据库进行交互,而是通过DAO对象来进行。这样,即使数据库的实现发生变化,只要接口或抽象类不变,业务层的代码就不需要修改,降低...

    java好用的dao

    "java好用的dao"这个标题暗示我们将讨论一个方便、高效的Java DAO实现,而"autodao"标签则指向了一个特定的库——AutoDAO,它自动为开发者生成DAO类,简化了开发过程。 AutoDAO是一个轻量级的开源Java库,它的主要...

    Factory(DAO).rar_Factory DAO_dao_dao facto_factory

    总的来说,Factory DAO模式是提高代码可扩展性和可维护性的一个有效工具,特别是在需要处理多种数据存储方式(如数据库、文件系统、Web服务等)的项目中。通过理解并正确运用这种模式,开发者能够更好地组织代码,...

    DAO-2.3.4.726

    DAO-2.3.4.726 可能是指DAO的一个特定版本,这在Java编程中常见,因为Java的DAO实现常常会以这种方式标记版本号。 iBATIS 是一个流行的数据持久层框架,它为Java应用提供了SQL映射框架。在iBATIS中,DAO(Data ...

    自动生成DAO源代码

    在本例中,我们可以创建一个JET模板来生成符合特定规范的DAO类,例如,模板可以包含接口定义、实现类以及相关的方法。JET模板使用一种类似Java的语法,可以通过变量和表达式动态地生成代码。 接下来,我们讨论...

    HibernateDao 通用

    在第一个周五的下午,团队会召开技术会议,讨论遇到的问题和技术解决方案。每天上午9:10,团队进行10分钟的站立会议,快速同步各自的工作进度。 开发环境配置包括使用JDK 1.6作为Java运行环境,Tomcat作为应用...

    hibernate4 通用dao,service

    由于没有具体的文件列表,我们无法详细讨论每个文件的内容,但根据标题和描述,我们可以推断这是一个关于使用Hibernate4创建通用DAO和Service的教程或资源,旨在帮助Java开发者理解和应用这种模式来提高开发效率。...

    Don’t repeat the DAO!

    1. **DAO模式概念**:DAO模式是一种设计模式,它定义了一个接口,用于封装对底层数据存储的访问,使得业务逻辑层可以与数据存储层分离。这样,即使数据存储方式改变,业务逻辑层也不需要修改。 2. **使用场景**:当...

    new_dao

    标题 "new_dao" 暗示我们关注的是与数据库操作相关的编程概念,可能是关于一个新的数据访问对象(DAO)的设计或实现。由于没有具体的描述,我们将基于标签 "源码" 和 "工具" 进行推测,并结合博客链接进行讨论。 在...

    dao.rar_dao

    DAO模式的核心思想是为每个数据表或数据库操作创建一个对应的DAO类,这样可以使得业务代码更加清晰,易于维护和测试。在这个"dao.rar_dao"的压缩包中,包含了一系列与DAO相关的Java源代码文件,它们分别是ItemDAO....

    dao设计模式视频教程

    DAO模式的主要目标是创建一个独立于数据库访问的接口层,使得业务对象可以不直接与数据库进行交互,而是通过调用DAO对象的方法来完成数据的增删改查操作。这样,如果数据库技术或者访问方式发生变化,只需要修改DAO...

    DAO概念及实现方式,清晰易懂,容易上手

    这种模式的一个重要特点是它独立于数据库类型、协议或者数据访问框架,例如它可以用于操作关系型数据库、文件系统、甚至是Web服务。通过定义清晰的数据访问接口,业务逻辑层不需要关心底层数据的具体实现,这样当...

    JavaScript语言教程基于autojs的Daodao for Android

    起初这还只是一个想法,直到主题群有小伙伴问到daodao(叨叨点啥)的搭建,讨论到了如何快捷发送daodao,原教程里只有ios版的,小伙伴就想着自己做一个,然后就有了daodao-bash。这版本是在pc端上用的,我就想着好像还...

    自动生成dao,service

    总的来说,自动生成DAO和Service代码是现代Java Web开发中的一个重要实践,它提高了开发效率,减少了错误,并保持了代码的整洁和一致性。通过理解和熟练运用这类工具,开发者可以更好地专注于业务需求,而不是基础...

    工厂模式很DAO模式实现购物车

    本项目“工厂模式很DAO模式实现购物车”是使用Java语言实现的一个购物车系统,旨在帮助初学者理解并运用这两种设计模式。 首先,我们来看**工厂模式**。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳...

    JSP+DAO和MVC+DAO(基于MySQL数据库分页)-v笔记

    **DAO的作用**在于提供一个抽象层,隔离业务逻辑和数据访问操作。在分页场景下,DAO会包含获取指定范围数据的接口,例如`getRecordsByPage(int pageNum, int pageSize)`。 **MVC+DAO分页** MVC模式是一种设计模式...

    StuDAO.rar_dao

    4. 模式优缺点:讨论DAO模式带来的好处,如解耦、提高可测试性,以及可能存在的问题,如过度封装可能导致的效率问题。 5. 框架集成:介绍如何将DAO模式与Spring等框架结合,利用框架的事务管理、AOP等功能进一步优化...

    spring hibernate 泛型DAO

    为了解决这个问题,我们可以使用泛型DAO。泛型DAO是一个通用的DAO实现,它使用Java的泛型特性,可以适用于任何继承自特定基类或者实现特定接口的数据实体类。这样,我们只需要编写一次DAO的通用实现,然后在需要的...

Global site tag (gtag.js) - Google Analytics