基于外观模式的数据库访问层的设计与实现

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:liongliong459
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:外观模式是一种使用普遍的设计模式。利用它设计的中间件,拥有使用方便,理解容易等特点。文章利用外观模式对系统中的数据库访问层进行设计,并利用C#语言实现其功能。
  关键词:设计模式;外观模式;数据库访问层
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)23-849-03
  Design and Realization of Database Access Layer Based on Facade Pattern
  LI Dan
  (School of Software, HuaZhong University of Science and Technology, Wuhan 430000, China)
  Abstract: The Facade Pattern, a kind of Design Patterns, is widely used. The Midware designed with the Facade Pattern is easy to understand and be used. We design the Database Access Layer with the Facade Pattern and try to realize it with C#.
  Key words: Design Pattern; Facade Pattern; Database Access Layer
  
  1 引言
  
  Christopher Alexander说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动” [1]。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。它可以帮助你做出有利于系统复用的选择,同时提高系统的可维护性[2]。
  
  2 设计模式介绍
  
  随着设计模式越来越流行,这个领域的研究和文献越来越多起来,出现了一些比较权威的设计模式研究成果和文献。在The Smalltalk Companion这本设计模式的权威书籍中给出了设计模式的一个定义:“设计模式是对读者经常遇到的设计问题的再现方案” [1]。一般而言,一个模式由四个基本要素构成。
  1)模式名称(pattern name):一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇,设计模式允许我们在较高的抽象层次上进行设计,基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们,模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果,找到恰当的模式名也是我们设计模式编目工作的难点之一。
  2)问题(problem):描述了应该在何时使用模式,它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
  3)解决方案(solution):描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式,因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
  4)效果(consequences):描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题,因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。
  
  3 外观模式介绍
  
  Facade是主要的设计模式之一,得到广泛的应用。Facade为子系统中的一组方法提供一个一致的界面,这个界面就是“外观”,这个被称为“外观”的接口使得这一子系统更加容易被使用和理解(图1)。
  3.1 外观模式意图
  外观模式定义了一个将子系统的一组接口集成在一起的高层接口,以提供一个一致的界面。通过这个界面,其他系统可以方便地调用子系统中的功能,而忽略子系统内部发生的变化。
  3.2外观模式使用场合
  1)增强分层结构的逻辑性:在实现分层设计时,我们可以采用外观模式封装层次,从而可以清楚地划分层次界面的归属。然后我们约定,必须通过外观接口来访问内部方法或对象的实例,这样就保持了很清晰的层次结构。
  2) 封装现有系统:在做二次开发的时候,这时需要封装现有的老系统,使之对外可用。这样,我们的开发人员可以在不影响原先系统的功能的情况下开发新的系统,并且可以通过老系统的“外观”接口使用其方法。
  3)编写可复用的中间件:作为一个可能被经常使用的模块,可以把它设计成外观模式,这样在下一个相近的项目中,我们可以复用它。得益于外观模式,这个模块具有使用简单,易于理解的特点。
  
  4 基于外观模式的数据库访问层
  
  开发数据库应用程序时,不免涉及到数据库访问层的设计。一个良好的数据库访问层应该有如下特点:1)易用性,控制层的开发人员只需掌握罗干方法或函数。2)可移植性,对于不同的数据库平台应该都可以适用。3)可理解性,逻辑清晰,便于阅读和修改。而外观模式恰恰具有以上特点[3]。
  4.1 数据库访问层的设计
  采用外观模式设计数据库访问层,得到数据库访问层的类结构图(图2)。DbaseLayer是一个接口类,它就是文中提到的那个“外观”,利用它封装了下面比较复杂的数据访问层的实现。AccessDataBaseLayer、SQLServerDataBaseLayer、OracleDataBaseLayer、DB2DataBaseLayer分别采用不同的数据库连接字串与不同数据库链接,而这些具体的实现controlLayer是不用知道的,它建立DbaseLayer的实例以后就只需通过SqlExecute方法得到数据集合了。
  4.2 数据库访问层的实现
  C#是一种强大的高级编程语言,由于它具有DataSet等数据库工具类,编写数据库访问层比较方便,效率较高。所以本文利用C#实现此数据库访问层,以下是部分代码,包括外观基类和ACCESS,ORACLE数据库的连接类。
  public abstract class DBaseLayer {//外观基类
  protected OleDbConnection conn;
  private void openConnSelf()//打开连接
  {if (conn.State == ConnectionState.Closed)
  conn.Open ();}
  private void closeConnSelf() //关闭连接
  {if (conn.State == ConnectionState.Open )
  conn.Close ();}
  public DataTable SqlExecute(string sqlString)//执行sql查询得到数据dataTeble
  { OleDbDataAdapter oleAdapter = new OleDbDataAdapter ();
   DataSet dataSet = new DataSet ();
   DataTable dataTable = null;
   try {
  oleAdapter.SelectCommand = new OleDbCommand(sqlString, conn);
  openConnSelf();
  oleAdapter.Fill(dataSet, "tempdata");
  dataTable = dataSet.Tables[0];
  closeConnSelf();
  return dataTable;}
   catch (Exception ex) {
  return null;
   }}
  public void openConn(string connString) { //打开连接公共方法
   conn = new OleDbConnection(connString);}}
  public class AccessDatabaseLayer :DBaseLayer//ACCESS数据库访问实现
  {public AccessDatabaseLayer(string dataBaseName,string passWord,string useId)
  { string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Password="+passWord
  +"; User ID="+useId+";Data Source="+dataBaseName;
   openConn(connString);}}
  public class OracleDatabaseLayer:DBaseLayer//ORACLE数据库访问实现
   {string connString;//
  public OracleDatabaseLayer(string dataSource) {
   connString = "Provider=MSDAORA; Data Source="+dataSource
  +";Persist Security Info=False;Integrated Security=yes";
   openConn (connString);}}
  
  4 结语
  
  在开发数据库访问层时,使用外观模式,使得系统能够适用于不同种类的数据库,并且由于控制层不需要了解其实现细节,使用起来方便简单,从而增强了系统的复用性和可移植性。
  
  参考文献:
  [1] Gamma E, Richard H, Johnson R. Design Patterns: Elements of Reusable Object-Oriented[M].Addison-Wesley,1995.
  [2] 绉娟,田玉敏.软件设计模式的选择与实现[J].计算机工程,2004,30(10):79-81.
  [3] 陈小平,宋健康,欧建雄.多层J2EE架构下的会话Facade模式[J].微型电脑应用,2002,18(12):28-30.
其他文献
近日,OEKO-TEX启动了自助服务门户优秀应用企业评选活动。10月份的第一次评选有十家企业脱颖而出,OEKO-TEX奖励每家获证企业一个苹果的iPod nano(16GB),而这份小礼物会被授予
摘要:在分析网站结构的基础上,把同类信息划归为一个页面组,建立相应的XML模板库,进行web信息挖掘,为实现页面信息快速查询和信息分类提供了很好的方法。  关键词:网站结构;信息提取;XML模板库  中图分类号:G20文献标识码:A文章编号:1009-3044(2008)23-845-03  Research on Web Information Extraction Based on Web S
班风是一个班级的精神风貌。它是经过长期细致的教育和严格的训练,在班集体中逐步形成的情绪上、言论上、行为上的共同倾向,并通过思想、言行、风格和习惯诸方面表现出来,形
期刊
近几年,起重机的应用面逐步扩大,人们也愈发关注起重机使用问题。因起重机自身的电气设备数量多,也具有较大的容量,一定要依据规范标准实施保护接地检验工作,以此来防范起重机电击
在思想品德学科教学中实施德育渗透对初中阶段学生的道德养成、心理健康具有至关重要的作用,可以说,思想品德学科是素质教育理念下重要的德育途径。在本文中,笔者就如何在思
招商引资是我国地方政府经济工作中十分重要的一项内容,同时也是经济领域和法律领域中需要不断探讨的新课题.在当前的招商引资过程中,也有不少问题,涉及到经济、法规等各个领
摘要:分析了非计算机专业数据库原理课程教学过程中的存在问题,比如学生动手实践能力差、难以将理论应用于实践等。对此,本文提出了在确定教学目标,选择教材,及时复习、总结知识点,更新教学手段、加强实践环节、改革考核制度方式等方面进行的教学改革研究,采取了一些相应的教学改革措施,并取得了良好的效果。  关键词:数据库原理;教学改革  中图分类号:TP311文献标识码:A文章编号:1009-3044(200
前段时间 ,接到反映 ,贵阳市汽车运输三场的电子衡有负误差 ,正好该秤快到检定周期 ,于是我们决定到该单位进行周期检定。据该单位电子衡操作人员说 ,该秤确实存在误差 ,且随
自2016年5月1日起,我国将全面推进营业税改增值税,将建筑业、房地产业、金融业等纳入试点范围,自此,持续几十年的营业税实现完美收官.由此也带来的影响也对会计处理提出新的
邻居家住一楼,院里有一棵梨树。这棵梨树原是一个女人的。梨树寸寸拔高,终于长成了四邻里的风景,开出绵白的花,挂上青涩的果。这时,就有一些小脑袋在围墙外面打探。她很疼孩