动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.如何掌握Java(J2SE篇).
.JAVA基础知识(6).
.JDK 1.5 新功能使用实例之Generi.
.Java连接SQL Server 2000.
.Jbuilder5下调试得到主机ip的全过.
.java设计模式---prototype(原型).
.程序安装,升级及卸载核心部分(.
.JAVA里字符编码的探索与理解.
.一个字母频率分析计算小程序.
.GetBaseName 方法.
.前车之覆,后车之鉴--开源项目经.
.Java学习集中营各种问题的分析讲.
.WebLogic消息服务的运行时管理.
.Java的复杂数据类型.
.iReport整合向量图形的使用心得.
.全程指导Linux下JAVA环境配置.
.为J2ME开发移动3D游戏之立即模式.
.使用Java3D实现三维图像.
.类的实例创建.
.用.net创建windows service的总结.

Java模式设计之数据访问对象模式

发表日期:2008-1-5 |



  很多的J2EE应用程序需要使用持久性数据(数据库、文件等)。不同的程序,持久性存储是各不相同的,并且用来访问这些不同的持久性存储机制的API也有很大的不同。假如应用程序要在不同的持久性存储间迁移,这些访问特定持久存储层的代码将面临重写。

  如何解决这个问题?且看"DAO模式"

  数据访问对象(Data Acess Object) 模式

  一.环境

  根据数据源不同,数据访问也不同。根据存储的类型(关系数据库、面向对象数据库、文件等等)和供给商实现不同,持久性存储(比如数据库)的访问差别也很大。
 
  二.问题

  许多真是的J2EE应用程序需要在一定程度上使用持久性数据。对于许多应用程序,持久性存储是使用不同的机制实现的,并且用来访问这些不同的持久性存储机制的API也有很大的不同。

  比如,应用程序使用实体bean(这里应该是指BMP的bean,CMP的bean已大大降低了与RDBMS的耦合)的分布式组件来表示持久性数据,或者使用JDBC API来访问驻留在某关系数据库治理系统(RDBMS)中的数据,这些组件中包含连接性性和数据访问代码会引入这些组件与数据源实现之间的紧密耦合。组件中这类代码依靠性使应用程序从某种数据源迁移到其他种类的数据源将变得非常麻烦和困难。当数据源变化时,组件也需要改变,以便于能够处理新类型的数据源。

  (举个例子来说,我们UPTEL系统是使用JDBC API对 Oracle数据库进行连接和数据访问的,这些JDBC API与SQL语句散布在系统中,当我们需要将UPTEL迁移到其他RDBMS时,比如曾经迁移到INFORMIX,就面临重写数据库连接和访问数据的模块。)

  三.作用力

  1.诸如bean治理的实体bean、会话bean、servlet等组件往往需要从持久性存储数据源中检索数据,以及进行数据存储等操作。

  2.根据产品供给商的不同,持久性存储API差别也很大,这些API和其能力同样根据存储的类型不同也有差别,这样存在以下缺点,即访问这些独立系统的API很不统一。

  3.组件需要透明于实际的持久性存储或者数据源实现,以便于提供到不同供给商产品、不同存储类型和不同数据源类型的更轻易的移植性。
  四.解决方案

  使用数据访问对象(DAO)模式来抽象和封装所有对数据源的访问。DAO治理着与数据源的连接以便检索和存储数据。

  DAO实现了用来操作数据源的访问机制。数据源可以时RDBMS,LDAP,File等。依靠于DAO的业务组件为其客户端使用DAO提供更简单的接口。DAO完全向客户端隐藏了数据源实现细节。由于当低层数据源实现变化时,DAO向客户端提供的接口不会变化,所有该模式答应DAO调整到不同的存储模式,而不会影响其客户端或者业务组件。重要的是,DAO充当组件和数据源之间的适配器。

  (按照这个理论,假如我们UPTEL系统使用了DAO模式,就可以无缝的从ORACLE迁移到任何一个RDBMS了。梦想总是很完美的,且看看DAO模式如何实现)

  1.结构,图1是表示DAO模式中各种关系的类图。

  此主题相关图片如下:


(图片较大,请拉动滚动条观看)

  2.参与者和职责

  1)BusinessObject(业务对象)

  代表数据客户端。正是该对象需要访问数据源以获取和存储数据。

  2)DataAccessObject(数据访问对象)

  是该模式的主要对象。DataAccessObject抽取该BusinessObject的低层数据访问实现,以保证对数据源的透明访问。BusinessObject也可以把数据加载和存储操作委托给DataAccessObject。

  3)DataSource(数据源)

  代表数据源实现。数据源可以是各RDBMSR数据库,OODBMS,XML文件等等。

  4)valueObject(值对象)

  代表用做数据携带着的值对象。DataAccessObject可以使用值对象来把数据返回给客户端。

  DataAccessObject也许会接受来自于客户端的数据,其中这些用于更新数据源的数据存放于值对象中来传递。

  3.策略

  1).自动DAO代码产生策略

  因为每个BusinessObject对应于一个非凡的DAO,因此有可能建立BusinessObject,DAO和低层实现(比如RDBMS中的表)之间的关系(映射)。一点这些关系(映射)已经建立,我们就可以编写与应用程序有馆的代码生成的简单工具了(什么?自己写GP程序?用ORM的附带工具自动生成不就完了,最多自己写几个Adapter,牛人就是不同,啥都要自己写...),其中的工具可以产生该应用程序需要的所有DAO代码。

  假如DAO需求很复杂,我们可以采用第三方工具,其中这些工具提供对象到RDBMS数据库的关系映射(这里指的是前面提到的ORM工具,全称是Object Relation Mapping,目前成熟的ORM工具有很多:Hibernate,OJB,Torque,TopLink等等)。

  这些工具通常包含GUI工具来把业务对象映射到持久性存储对象,并且因而定义中间DAO。一旦这些映射完成,这些工具会自动地生成代码,并且也许会提供其他增值功能,比如结果缓冲、查询缓冲、与应用程序集成,以及与其他第三方产品(比如分布式缓冲)地继续,等等。

  (增值服务:Torque提供了结果缓冲,Hibernate提供了对Oracle数据库SQL指令的优化,OJB提供JDO API、OMDB API)

  2).数据访问对象的工厂策略

  通过调整抽象工厂和工厂方法模式,DAO模式可以达到很高的灵活度。

  当低层存储不会随着实现变化而变化时,该策略可以使用工厂方法模式来实现该策略。以产生应用程序需要的大量DAO。图2是这种情况下的类图。

  此主题相关图片如下:

Java模式设计之数据访问对象模式

  当低层存储随着实现变化而变化时,该策略可以使用抽象工厂方法模式而实现。

  图3是这种情况下的类图。

  此主题相关图片如下:


(图片较大,请拉动滚动条观看)
  5.结果

  1).启用透明性

  业务对象可以是使用数据源,而无须了解该数据源实现的具体细节。访问是透明的,原因是实现被隐藏在DAO的内部。
 
  2).启用更轻易的迁移


上一篇:J2ME中文教程之J2ME技术概述 人气:666
下一篇:品味Spring 的魅力 人气:484
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-12-5 新普网络商城XpShop.net v6.6 bu
2008-12-5 ShopEx 网上商店系统 v4.8.2.166
2008-12-5 ShopEx 网上商店系统 v4.8.2.166
2008-12-5 bbsmax v3.0 RTM
2008-12-5 飞飞ajax模仿google提示输入框(兼
2008-12-5 FluxBB v1.2.21
2008-12-5 开源WEB在线SQL管理工具 v1.0.1
2008-12-5 精点留言本 v3.67
2008-12-5 Pomeloo电影程序 v3.1.0
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
2008-11-29 Opera 9.62 Build 10469
2008-11-29 MPlayer WW编译版 SVN-r28044(20
2008-11-29 NetTools网络工具v1.0.0破解版
2008-11-29 3DGallery三维体验1.1破解版
2008-11-29 SecretBook保密本v1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号