`
lym6520
  • 浏览: 704106 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

这样设计dao合理吗?大家讨论讨论!(修改版)

阅读更多

这是我设计的dao的类图,我想通过这样的设计(如下图),已经可以实现单一dao的功能。

  • 大小: 18.9 KB
分享到:
评论
48 楼 lym6520 2009-07-10  
修改了下,大家发表发表意见!
47 楼 lym6520 2009-07-10  
换了标题,请大家支持,讨论讨论!
46 楼 vb2005xu 2009-07-10  
哪有这种东西啊,你好好看看 ActiveRecord , 这个倒是比较容易实现
45 楼 turionboy 2009-07-10  
god,  
44 楼 lym6520 2009-07-09  
...
43 楼 treblesoftware 2009-07-09  
lym6520 写道
引用
这里封装一层并不一定可以提高速度,但是,如果你的DAO是泛型的封装了HIBERNATE框架,那么速度一定提高不少

有没有人支持呢?然到用了泛型速度就可以提高吗?



我晕,朋友,你的帖子快被新手了。哎!
42 楼 lym6520 2009-07-09  
引用
这里封装一层并不一定可以提高速度,但是,如果你的DAO是泛型的封装了HIBERNATE框架,那么速度一定提高不少

有没有人支持呢?然到用了泛型速度就可以提高吗?
41 楼 treblesoftware 2009-07-09  
lym6520 写道
treblesoftware 写道
lym6520 写道
treblesoftware 写道
lym6520 写道
treblesoftware 写道
抽象BASEDAO继承HibernateDaoSupport。之后又被继承,很乱。而且加个抽象,把实现放在子类,看似是万能,但是封装了这一层能给我们带来什么?复杂的关系?还是减少了我们的代码?

其实我在开发当中所有dao都要继承HibernateDaoSupport,你是否有更好的方法?在实际开发当中确实可以给你减少代码!



我认为DAO的作用最多是减少一层偶合,本身它的责任就是这个,如果在DAO上在抽象,在封装,都失去了原本的意义了哦。我是直接来个泛型,把通用的方法往这个DAO里一写(先通用起来),之后别的DAO(那些乱七八糟的逻辑)在继承那个泛型DAO。这样反而来的简单呀。

我觉的用泛型挺麻烦的,定义的时候还要告诉他我是哪个实体,等等我用你的方法。。。之类的!
而我的这个,语句可以实现大部分操作,而如果真的有一些复杂的操作,可以再定义一个dao专门处理那些复杂的操作...但是我想dao层存在的主要目的是与数据库通信,让服务层来调用,不应该包含太多的业务,你可以封装复杂的hql语句。


为了提高开发的速度,可以减少代码呀。而且还可以统一编码规范,容易TDD啊(汗,这部分本身就不需要TDD,因为泛型DAO TDD过一次就已经OK了)。可以减少编码错误吧,统一风格。

提高开发速度?真的是这样吗?如果一个dao可以解决的问题,为什么还要用上泛型dao呢?


这问题扯开就有点撤远了。这里封装一层并不一定可以提高速度,但是,如果你的DAO是泛型的封装了HIBERNATE框架,那么速度一定提高不少。很明显,几乎3十几种相同的方法,你不需要在一遍一遍的重写,虽然这个东西看起来重写一次也很简单,但是在这个重写的过程中很容易出错,一出错,你DBUG的时间就多了。所以这个泛型DAO从这一方面来说,有优势,而且这3十几种方法被统一了,不会因为人不同,而写出不同的DAO,从这方面,也有优势,方便维护。而且可以减少TDD,测试的时间。还有些优点,不说了,呵呵。
40 楼 lym6520 2009-07-09  
treblesoftware 写道
lym6520 写道
treblesoftware 写道
lym6520 写道
treblesoftware 写道
抽象BASEDAO继承HibernateDaoSupport。之后又被继承,很乱。而且加个抽象,把实现放在子类,看似是万能,但是封装了这一层能给我们带来什么?复杂的关系?还是减少了我们的代码?

其实我在开发当中所有dao都要继承HibernateDaoSupport,你是否有更好的方法?在实际开发当中确实可以给你减少代码!



我认为DAO的作用最多是减少一层偶合,本身它的责任就是这个,如果在DAO上在抽象,在封装,都失去了原本的意义了哦。我是直接来个泛型,把通用的方法往这个DAO里一写(先通用起来),之后别的DAO(那些乱七八糟的逻辑)在继承那个泛型DAO。这样反而来的简单呀。

我觉的用泛型挺麻烦的,定义的时候还要告诉他我是哪个实体,等等我用你的方法。。。之类的!
而我的这个,语句可以实现大部分操作,而如果真的有一些复杂的操作,可以再定义一个dao专门处理那些复杂的操作...但是我想dao层存在的主要目的是与数据库通信,让服务层来调用,不应该包含太多的业务,你可以封装复杂的hql语句。


为了提高开发的速度,可以减少代码呀。而且还可以统一编码规范,容易TDD啊(汗,这部分本身就不需要TDD,因为泛型DAO TDD过一次就已经OK了)。可以减少编码错误吧,统一风格。

提高开发速度?真的是这样吗?如果一个dao可以解决的问题,为什么还要用上泛型dao呢?
39 楼 treblesoftware 2009-07-09  
lym6520 写道
treblesoftware 写道
lym6520 写道
treblesoftware 写道
抽象BASEDAO继承HibernateDaoSupport。之后又被继承,很乱。而且加个抽象,把实现放在子类,看似是万能,但是封装了这一层能给我们带来什么?复杂的关系?还是减少了我们的代码?

其实我在开发当中所有dao都要继承HibernateDaoSupport,你是否有更好的方法?在实际开发当中确实可以给你减少代码!



我认为DAO的作用最多是减少一层偶合,本身它的责任就是这个,如果在DAO上在抽象,在封装,都失去了原本的意义了哦。我是直接来个泛型,把通用的方法往这个DAO里一写(先通用起来),之后别的DAO(那些乱七八糟的逻辑)在继承那个泛型DAO。这样反而来的简单呀。

我觉的用泛型挺麻烦的,定义的时候还要告诉他我是哪个实体,等等我用你的方法。。。之类的!
而我的这个,语句可以实现大部分操作,而如果真的有一些复杂的操作,可以再定义一个dao专门处理那些复杂的操作...但是我想dao层存在的主要目的是与数据库通信,让服务层来调用,不应该包含太多的业务,你可以封装复杂的hql语句。


为了提高开发的速度,可以减少代码呀。而且还可以统一编码规范,容易TDD啊(汗,这部分本身就不需要TDD,因为泛型DAO TDD过一次就已经OK了)。可以减少编码错误吧,统一风格。
38 楼 lym6520 2009-07-09  
treblesoftware 写道
lym6520 写道
treblesoftware 写道
抽象BASEDAO继承HibernateDaoSupport。之后又被继承,很乱。而且加个抽象,把实现放在子类,看似是万能,但是封装了这一层能给我们带来什么?复杂的关系?还是减少了我们的代码?

其实我在开发当中所有dao都要继承HibernateDaoSupport,你是否有更好的方法?在实际开发当中确实可以给你减少代码!



我认为DAO的作用最多是减少一层偶合,本身它的责任就是这个,如果在DAO上在抽象,在封装,都失去了原本的意义了哦。我是直接来个泛型,把通用的方法往这个DAO里一写(先通用起来),之后别的DAO(那些乱七八糟的逻辑)在继承那个泛型DAO。这样反而来的简单呀。

我觉的用泛型挺麻烦的,定义的时候还要告诉他我是哪个实体,等等我用你的方法。。。之类的!
而我的这个,语句可以实现大部分操作,而如果真的有一些复杂的操作,可以再定义一个dao专门处理那些复杂的操作...但是我想dao层存在的主要目的是与数据库通信,让服务层来调用,不应该包含太多的业务,你可以封装复杂的hql语句。
37 楼 treblesoftware 2009-07-09  
lym6520 写道
treblesoftware 写道
抽象BASEDAO继承HibernateDaoSupport。之后又被继承,很乱。而且加个抽象,把实现放在子类,看似是万能,但是封装了这一层能给我们带来什么?复杂的关系?还是减少了我们的代码?

其实我在开发当中所有dao都要继承HibernateDaoSupport,你是否有更好的方法?在实际开发当中确实可以给你减少代码!



我认为DAO的作用最多是减少一层偶合,本身它的责任就是这个,如果在DAO上在抽象,在封装,都失去了原本的意义了哦。我是直接来个泛型,把通用的方法往这个DAO里一写(先通用起来),之后别的DAO(那些乱七八糟的逻辑)在继承那个泛型DAO。这样反而来的简单呀。我走的还是老路子,不过感觉这个老路子还不错。这样用的人也挺多的。
36 楼 lym6520 2009-07-09  
35 楼 lym6520 2009-07-09  
treblesoftware 写道
抽象BASEDAO继承HibernateDaoSupport。之后又被继承,很乱。而且加个抽象,把实现放在子类,看似是万能,但是封装了这一层能给我们带来什么?复杂的关系?还是减少了我们的代码?

其实我在开发当中所有dao都要继承HibernateDaoSupport,你是否有更好的方法?在实际开发当中确实可以给你减少代码!
34 楼 treblesoftware 2009-07-09  
抽象BASEDAO继承HibernateDaoSupport。之后又被继承,很乱。而且加个抽象,把实现放在子类,看似是万能,但是封装了这一层能给我们带来什么?复杂的关系?还是减少了我们的代码?
33 楼 lym6520 2009-07-09  
看看源码,大家在看是否可以做到万能!当然要是真的要做到万能还需要扩展的。
32 楼 lucky16 2009-07-09  
真的可以万能嘛??
31 楼 spyker 2009-07-09  
wxq594808632 写道
..万能..

30 楼 bill9 2009-07-09  
想法不错,但是真正应用于生产系统,还需要做一些工作。
比如一些特殊类型的处理,timestamp,clob等
有些时候仅仅setobject是不行的
29 楼 holan 2009-07-09  
Jackphone 写道
在新版《Hibernate 实战》中Gavin King已经给出了一个实现,大家可以参考。

就是就是,这个才是正解

相关推荐

    2概要设计1

    《码农聊天网站概要设计》 ...综上所述,码农聊天网站的设计综合考虑了功能需求、性能优化、安全性以及用户体验,采用成熟的技术栈和合理的架构设计,以期构建一个高效、安全、用户友好的在线交流平台。

    通讯录系统文档(初期设计)

    ### 通讯录系统文档(初期设计)知识点梳理 #### 一、项目背景及意义 - **背景**: 随着现代社会人际交往的增加,管理个人联系信息变得日益重要。传统的纸质通讯录已不能满足现代人的需求,特别是在频繁出差的情况...

    关于一些数据库的资料,看看吧!看看吧!对各位有好处的啊!

    7. **数据库设计**:涉及数据库的结构设计,包括关系模型,以及如何根据业务需求进行合理的数据库表设计。 8. **安全性**:介绍了如何设置访问控制,保护数据库免受未经授权的访问。 9. **数据备份与恢复**:讲解...

    软件的技术方案设计完整版.docx

    【软件的技术方案设计完整版.docx】文档详细阐述了一个基于JavaEE技术的软件开发方案,主要涉及以下几个核心知识点: 1. **开发框架与体系结构**: - 本方案采用B/S架构,允许系统集中部署并分布式使用,便于升级...

    设计健壮的关系数据库持久层

    文档中的设计部分详细讨论了持久层的设计要素: 1. **总体设计**:从高层次上概述了持久层的组成部分及其相互作用。 2. **具体类的设计**:每个类的作用和其实现细节,如持久对象类如何封装数据库记录的状态。 3. *...

    基于ssm+mysql教师管理信息系统源码数据库论文.doc

    本文将详细讨论如何利用SSM框架和MySQL数据库设计并实现一个教师管理信息系统。教师信息管理是学校日常运营的关键部分,包括教师基本信息、课程安排、考核评价、奖励惩罚等多个方面。传统的管理方式往往效率低下,而...

    JAVA 窗体系统

    在这个特定的场景中,我们讨论的是一个基于Java的学生成绩管理系统,它利用了GUI窗体来交互并管理学生数据,并且依赖MySQL数据库来存储和操作这些数据。下面我们将深入探讨相关的知识点。 1. **Java GUI**: - **...

    基于SSH的BBS论坛

    【基于SSH的BBS论坛】是一个使用Struts2、Spring和Hibernate三大框架构建的网络社区应用。SSH(Struts2、Spring、Hibernate)是Java ...通过合理设计和不断优化,这样的论坛能为用户提供稳定、高效、安全的交流平台。

    Spring Security 2.0.x完全中文参考文档

    Session固定是一种常见的攻击手段,通过合理的配置可以有效防止此类攻击的发生。 **2.4. 保护方法** - **2.4.1. 元素** `<global-method-security>`标签可以用来全局地启用方法级别的安全性检查。 - **2.4.1.1...

    myeclipse7.1Gen的写法

    通常,Gen工具支持自定义模板,可以用于生成如实体类(Entity)、数据访问对象(DAO)、服务层接口和服务实现(Service Interface & Implementation)、控制器(Controller)等不同层次的代码。此外,它还能根据...

    如何学习mysql绝对经典

    - **数据库设计**:了解ER模型(实体-关系模型)和范式理论,用于创建合理、高效的数据库结构。 2. **MySQL安装与配置** - **下载与安装**:访问MySQL官网下载适合操作系统的版本,并按照指引完成安装。 - **...

Global site tag (gtag.js) - Google Analytics