在数据访问层使用抽象工厂设计模式的C#实现

来源 :硅谷 | 被引量 : 0次 | 上传用户:alpaalpa
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  [摘要]简单介绍设计模式的概念,探讨属于创建型模式的抽象工厂设计模式的概念及运用场合,最后给出开发三层结构数据库应用系统,数据访问层使用抽象工厂设计模式的C#实例。
  [关键词]设计模式 抽象工厂设计模式 三层结构数据库应用系统 C#
  中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0420030-01
  
  以数据为中心开发的应系统,都涉及到访问数据库问题,还有可能要求能够访问不同的数据库,那在三层结构下数据访问层实现数据访问如何满足客户要求,本文探讨了使用抽象工厂设计模式的C#*实现。
  
  一、设计模式定义、来历
  
  类似的一些问题在开发中经常遇到,经过前人的整理得出的一些好的解决方案,面向对象设计模式就是为了实现面向对象的一些原则的。那么我们可以得到设计模式的定义:设计模式就是重复问题的一些好的解决方案。
  设计模式起源于建筑,首先由建筑设计师亚历山大提出的,然后经过前人推广到软件设计行业来。在他的那本著名“模式语言”(A Pattern Language)一书中,他写道:“每个模式都描述着一种在我们的环境中一遍又一遍地出现的问题,并因此描述了对该问题的核心解决方案。以此方式你可以使用该方案上百万次,而从不需要重复作同样的事情。”
  软件行业最早出现的设计模式著作是GOF(Gang Of Fours)四人组所著的那本《设计模式-可复用面向对象软件基础》,这本书将设计模式分为三大类:
  1.创建型模式:创建型模式是关注对象的创建实例化的。它将对象的创建与对象的实现、描绘相分离。
  2.结构型模式:结构型模式关注复杂对象的构建。将小粒度的对象组合成大的对象。
  3.行为型模式:行为型模式关注对象的职责以及他们之间如何通信的问题。
  抽象工厂设计模式属于对象创建型模式。
  
  二、抽象工厂设计模式的使用场景以及特点
  
  在软件开发中我们经常会碰到一系列相关的对象需要创建,如果按照常规做法我们就要为不同的对象创建编写不同的代码,复用性和可维护性都降低了。而且这些相关对象创建的方式也许不同,那么客户代码创建的时候就要针对不同的对象编码,对象创建的方式还是一个容易改变的地方。基于这样的情况提出了抽象工厂模式,抽象工厂模式为创建一系列相关对象提供了统一的接口,客户只要调用这个接口即可,封装了变化,隔离了变化,让客户代码稳定起来。
  何抽象工厂都包含以下四大部分:
  1.抽象工厂:为创建对象提供一般接口。
  2.具体工厂:抽象工厂的实现。
  3.抽象产品:定义了被创建对象的一般接口。
  4.具体产品:抽象产品的实现,即实际对象。
  抽象工厂设计模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
  一个抽象工厂类,可以派生出多个具体工厂类。
  每个具体工厂类可以创建多个具体产品类的实例。
  抽象工厂既可以实现自抽象基类,也可以实现自接口。接口一般是保持基础代码既具有一定的结构,又具有一定的灵活性。但是,有时候我们不希望受到由接口定义的框架的束缚,而转向抽象基类。
  
  三、在数据访问层使用抽象工厂模式
  
  在.NET框架下开发三层结构数据库应用系统,三层指的是:表示层、业务逻辑层、数据访问层。在数据访问层实现对数据库的访问,当应用系统需要访问多个数据库的时候,我们可以采用抽象工厂模式实现具体访问哪个数据库,而不需要修改数据层代码。具体实现的结构如图1示:
  


  从图中我们可以看到,客户只知道有抽象工厂和抽象产品。通过抽象工厂选择创建的实体工厂,我们可以通过修改配置文件的属性值,传递信息选择创建的实体工厂,在实体工厂创建抽象产品的实体产品对象。具体实现部分代码如下:
  public abstract class ChoiceFactory// 实现抽象工厂
  {public static Demo.AbstractFactory.ChoiceFactory Choicefactory()
  {//获取配置文件的属性值
  string key = System.Configuration.ConfigurationManager.AppSe
  ttings["DAL"];
  //判断创建哪个实体工厂
  switch(key) {case "SQL":return new SqlFactory();
  case "Access":return new AccessFactory();
   default: return null; }}
  public abstract Demo.IDAl.IUserDAL CreateUserId();//抽象方法}
  public class SqlFactory : ChoiceFactory // 实现SQL Server实体工厂
  { public override Demo.IDAl.IUserDAL CreateUserId()
  { return new Demo.DAl.UserDAL();}}
  public class AccessFactory : ChoiceFactory //实现 Access实体工厂
  { public override Demo.IDAl.IUserDAL CreateUserId()
  { return new Access.DAL.UserDAL();}}
  public interface IUserDAL// 管理员抽象产品
  { bool LoginCheck(string strName, string strPwd);}
  public class UserDAL:IUserDAL // SQL Server管理员实体产品
  { public bool LoginCheck(string strName, string strPwd)
   { string strSQL = "usp_ISAdminUser";
   SqlParameter[] parm = new SqlParameter[]
  {new SqlParameter("@loginId",strName),
  new SqlParameter("@loginPwd",strPwd),
  new SqlParameter("@return",0)};
   parm[2].Direction = ParameterDirection.ReturnValue;
   return DBHelper.ExecuteQuery(strSQL, parm); }}
  抽象工厂实现采用的是实现自抽象基类,实体工厂继承基类和抽象方法。抽象产品实现采用接口,实体产品类实现抽象产品接口。根据配置属性的值,在抽象工厂里创建的是SQL Server实体工厂,从上面的代码看,那创建的实体产品就是SQL Server管理员实体产品。
  四、结束语
  采用三层结构开发数据库应用系统,能有效降低建设和维护成本,简化管理,可适应不断的变化和新的业务需求,能有效提高系统安全性等多个优点,在数据库访问层采用抽象工厂设计模式,可以实现方便地访问异构数据库。
  
  参考文献:
  [1](美)麦斯科著,颜炯译,C#设计模式,中国电力出版社,2005.7.1.
  [2](美)Glenn Johnson,ADO.NET 2.0高级编程,清华大学出版社,2006.5.
  [3]阿博泰克,北大青鸟信息技术有限公司编著,在NET框架下开发三层结构数据库应用系统,科学技术文献出版社,2008.1.
其他文献
[摘要]从数据库设计人员的角度出发讨论SQL Server数据库性能优化的问题,非常详细地从数据库的逻辑设计到物理设计,再到数据库查询三个层次详细的描述数据库设计中性能优化的实现。  [关键词]数据库设计 SQL Server 优化  中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0120079-01    数据库系统是企业整个管理信息系统的核心和基础,它的任务就是把系统
期刊
[摘要]EMSIM是一款用于嵌入式功耗统计的指令集模拟器。结合SA-110的体系结构通过对EMSIM源码的分析,研究EMSIM对SA-110指令集的模拟方法,分析功耗统计算法在EMSIM中是如何实现的。为用软件的方法统计嵌入式系统功耗提供借鉴。  [关键词]EMSIM 嵌入式系统 指令集模拟器 功耗统计  中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0120030-02
期刊
[摘要]设备是企业赖以生存、发展的物质技术基础,设备使用的好坏直接影响企业的生存和发展,而设备管理是企业管理最重要的管理内容之一,只有通过加强设备维修管理,使其充分发挥效能,不断改善设备技术状态,才能延长设备使用寿命,为企业获取最佳经济效益。就企业设备的维护管理做相关阐述。  [关键词]企业 设备 管理  中图分类号:TP2 文献标识码:A 文章编号:1671-7597(2009)0120111-
期刊
[摘要]介绍常用的网络程序测试的几种方法,并利用linux的流量控制功能搭建一个网络仿真器用以对嵌入式设备的网络功能进行测试,最后对该仿真器的实际仿真效果进行检验。  [关键词]嵌入式设备 网络仿真 流量控制 tc netem  中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2009)0120053-02    一、引言    随着嵌入式技术发展成熟,各种嵌入式设备由于其自身拥
期刊
[摘要]随着软件开发技术,尤其是Web应用开发技术的发展,Java越来越受到人们的青睐。叙述Java语言发展历程以及Java技术的应用,指出Java是当今IT产业和人类文明的创新和未来发展的方向。  [关键词]Java技术 框架结构  中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0120128-01    一、引言    于1995年5月Java正式问世,一些著名的计算
期刊
[摘要]通过对计算机程序设计教学的现状进行分析,提出程序设计中实施项目教学的两个值得注意的问题:即教学对教师的要求和项目的选编和实施。通过一个项目在VB.NET程序设计教学中的运用,讨论如何有效地把项目教学法运用于程序设计教学当中,提高计算机专业教学效果,培养出社会需求的高素质技能型人才。  [关键词]项目 项目教学 程序设计  中图分类号:G42文献标识码:A文章编号:1671-7597(200
期刊
[摘要]C++程序设计是计算机专业的核心课程,目前在教学过程中普遍存在重“语法”,轻“设计”的现象。给出一种新的教学方法,通过采用故事演绎,结合UML进行面向对象分析,以及案例教学的方式引导学生提高实际的编程能力,达到较好的效果。  [关键词]C++ 面向对象 UML  中图分类号:G42文献标识码:A文章编号:1671-7597(2009)0120155-02    一、引言    C++是一门
期刊
[摘要]基于网络的远程故障诊断是诊断系统的发展趋势,提出基于B/S结构的装备车辆的远程故障诊断技术的总体结构模型,B/S结构设计分析和系统软件平台设计思想。阐述基于B/S结构的远程故障诊断系统对提高装备车辆技术保障的重要意义。  [关键词]远程故障 B/S结构 诊断系统  中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0120124-02    一、引言    随着科学技
期刊
[摘要]机床PLC控制程序采用模块化编程,通过编制不同功能的子程序完成了PLC对机床顺序动作的控制,通过利用PLC的应用指令和内部特殊继电器实现了加工计数器和计时器功能程序段的设计,并编制了机床报警自诊断程序,通过利用时间继电器实现了检测开关在电磁阀动作后一定时间内的动作是否到位检测,确定开关有故障而发出报警信号。  [关键词]机床数控化 PLC 控制程序  中图分类号:TP2文献标识码:A文章编
期刊
[摘要]随着科技的发展,我们的地球越来越像地球村,这正是取决于当今飞速发展的信息技术,主要对当前3S技术的状况做些简单的介绍。  [关键词]3S 技术 遥感  中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0420034-01    一、“3S”技术系统    “3S”技术是地理信息系统(GIS)、遥感(RS)和全球定位系统  (GPS)的统称,是现代信息技术与空间分析研
期刊