抽象工厂模式在NET数据访问层中的应用.pdf
6 2IT E c H N。L。G Y技术应用抽象工厂模式在N E T 数据访问层中的应用魏一搏郭友(石家庄信息工程职业学院石家庄0 5 0 0 3 5)摘要:抽象工厂模式是向客户提供一个接口,使得客户在不必指定具体产品类型的情况下,创建多个产品系列中的某个产品对象。通过将抽象工厂模式应用于数据访问层,并结合反射技术,可以根据需要创建合适的一系列数据访问使用的对象,降低业务逻辑层和数据访问层之间的耦合,在一定程度上提高系统的易维护性和可扩展性。关键字:数据访问层;抽象工厂模式;反射当今的管理信息系统很少有不涉及数据库访问的,且大部分都涉及到关系数据库的访问。虽然目前的关系数据库通常采用S Q L 语言作为其查询语言,但各种关系数据库在S Q L 语言使用的很多细节上并不一致,且各厂商的关系数据库,甚至同一厂商的不同版本的关系数据库都有很大差异。如果一个软件系统由于需求的变更或预期的扩展和修改,需要更换不同版本或不同厂商的数据库,如A c c e s s、Or a c l e、M y S Q L 等,我们就需要对整个数据访问层进行更改。如果解决了这个问题,那么软件系统在数据库选择和可扩展可维护性方面就能够获得更大的灵活性。在系统的数据访问层设计中,将设计模式中的抽象工厂模式与N E T 的反射机制相结合设计的数据访问层能够很好的解决这方面的问题。一、抽象工厂模式概述设计模式早期出现在建筑业、制造业等领域中,设计模式也同样适用于面向对象的程序设计中。越来越多的人们己经认识到,在软件项目开发的过程中出现的许多问题都是由于开发人员没有很好地学习和利用前人的经验,而导致这种现象出现的一个很重要的原因就是人们在系统开发过程中不重视甚至忽略了对前人经验的总结和加工,这就是设计模式所要解决的问题。在软件设计中使用设计模式的根本原因是为了代码复用,增加系统的可维护性。抽象工厂模式是创建型模式中的一种,是各种形态的工厂模式中,具有更高层次抽象性的一种工厂模式形态。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定具体产品的情况下,创建多个产品系列中的某个产品对象。二、抽象工厂模式在数据访问层中的应用抽象工厂模式的结构如图1 所示。可以看出,C I I e n t 使用的是派生自两个不同抽象产品类的对象。首先,客户对象并不知道自己使用的产品是哪一个,因为产品对象的创建是工厂对象的责任。其次,客户对象也并不知道自己使用的特定工厂图1抽象工厂模式结构图对象是哪个,因为它只知道自己拥有一个抽象工厂对象(A b s t r a c t F a c t o r y),而抽象工厂对象拥有两个实体工厂对象,即C o n cr e a t e F a c t or y l 和 万方数据C o n c r e a t e F a c t o r y 2。这样,就实现了对客户对象封装了关于使用哪些服务者对象的选择细节。将抽象工厂模式运用到传统的数据访问层后,数据访问层简洁结构如图2 所示。在使用抽象工厂模式时,同系列的“产品”必须有公共的接口,I D A L就是S Q L S e r v e r D A L 和A c c e s s D A L 的公共接口程序集,负责提供实现数据访问层必须功能的接口,而S Q L S e r v e r D A L 和A c c e s s D A L 分别负责实现具体访问S Q L S e r v e r 数据库和A c c e s s 数据库的数据访问层功图2 数据访问层的抽象工厂模式能,它们是具体的“产品”系列。A b s t r a c t F a c t o r y是一个抽象工厂接口,它里面包含创建所有需要的数据访问层功能对象的接口方法,而S Q L F a c t o r y和A c c e s s F a c t or y 就是具体的工厂,它们实现了A b s t r a c t F a c t o r y 中的抽象方法,负责创建具体的数据访问层功能对象,即S Q L S e r V e r D A L 和A c c e s s D A L 中T E c H N。L。G Y技术应用l6 3的“产品”。在运行时,如果需要通过数据访问层访问数据,只需在业务逻辑层通过A b s t r a c t f a c t o r y J 建正确的工厂实例即可。使用抽象工厂模式的最大好处是易于交换产品系列,如果需要将系统数据库由S Q L S e r v er 更换为A c c e s s 的话,只需在B L L 中更改实例化的具体工厂对象即可。这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂就可使用不同的产品配置。而同时,通过使用这种方式,使具体的创建实例过程与B L L 分离,B L L 是通过它们的抽象接口来操纵实例的,产品的具体名称也被具体工厂的实现分离,不会出现在B L L 的代码中。仍然存在的问题在于,虽然在使用抽象工厂模式后使得系统可以更方便的切换数据库的访问代码,但是如果变更的需求是来源于数据访问功能的增加,那么我们至少需要在I D A L、S Q L S e r v e r D A L 和A c c e s s D A L 中增加相应的功能接口和实现,还需要更图3 系统数据访问层结构图改A b s t r a c t F a c t o r yS Q L F a c t o r y 和A c c e s s F a c t o r y 中的代码才能够实现。这个问题虽然可以通过使用简单工厂模式进行改进,即抛弃A b s t r a c t F a c t or yS Q L F a c t o r y 和A c c e s s F a c t o r y-个工厂,转而通过一个简单工厂将客户端与数据访问解耦,但是在更换新数据库如O r a c l e 时还是要在D A L F a c t o r y I 厂中添加相应的代码。这个问题的解决在使用N E T 的反射技术后迎刃而解。(下转5 9 页)万方数据G 7 2 3(G 7 2 3 1)话音压缩编码技术。以G 7 2 9 为例,它可将经过采样的6 4 k b s 话音以几乎不失真的质量压缩至8 k b s。话音压缩编码技术是l P 电话技术的一个重要组成部分。图像编码方面有I P 网络会议系统采用的H 2 6 1(活动图像编码)和H 2 6 3(低速率活动图像编码)。由于在分组交换网络中,业务质量不能得到很好保证,因而需要话音和图像的编码具有一定的灵活性,也就是说编码速率、编码尺度的可变可适应性。在图像编码方面,H 2 6 3 采取了多种方式使得图像编码的尺度可变(分层编码、多精度编码),即根据不同的信道质量可以对码流进行调整,以保证所需的业务质量。在话音编码方面,近年来的研究得出G 7 2 9中一种很好的算法。G 7 2 9 原来是8 k b s 的话音编码标准,现在经进一步的研究和实践将其工作范围扩展至6 4 11 8 k b s,话音质量也在此范围内有一定的变化,但即使是6 4 k b s,话音质量也还不错,因而很适合在V o l P 系统中使用。2 3 媒体实时传输技术实时传输协议R T P 提供具有实时特征的、端到端的数据传输业务,可以用来传送声音和活动图像数据,在这项数据传输业务中包含了装载数据的标识符、序列号、时戳以及传送监视。通常R T P 的协议数据单元是用U D P 分组来承载的。而且为了尽量减少时延,话音净荷通常都很短。这种I P 话音分组的开销很大,约为6 6 一8 0。于是有人提出了组合R T P 分组的概念。采用这种组合复用方法的确可以大大提高传输效率,但是目前尚无标准。2 4 业务质量保障技术V o l P 中主要采用资源预留协议(R S V P)以及进行服务质量监控的实时传输控制协议R T C P 来避免网(上接6 3 页)在系统的设计中,通过反射技术可以使用类型名称字符串来实例化对象的功能,将实例化具体“产品”的工作在D A L F a c t o r y d p 通过反射技术+系统配置文件的方式来实现,从而彻底解决数据库访问时的可维护、可扩展问题。运用反射后,可得到的数据访问层结构如图3 所示。三、结束语将设计模式中的抽象工厂模式和N E T d P 的反射T E c H N。L。G Y技术应用l5 9络拥塞,保障通话质量。2 5 网络传输技术V o l P 中网络传输技术主要是T C P 和U D P,此外还包括网关互联技术、路由选择技术、网络管理技术以及安全认证和计费技术等。由于实时传输协议R T P提供具有实时特征的、端到端的数据传输业务,因此V o l P 中可用R T P 来传送话音数据。在R T P 报头中包含装载数据的标识符、序列号、时间戳以及传送监视等,通常R T P 协议数据单元是用U D P 分组来承载,而且为了尽量减少时延,话音净荷通常都很短。I P、U D P 和R T P 报头都按最小长度计算。V o l P 话音分组开销很大,采用R T P 协议的V o l P 格式,在这种方式中将多路话音插入话音数据段中,这样提高了传输效率。3 结束语如前面所介绍的,V o lP 技术在理论上已经逐渐成熟了起来。其在社会上也得到了广泛的应用。如现在大为流行的I P 电话。对于各级部门层次,也均有合适的V o l P 解决方案,因此V o l P 在将来必有更广阔的前景。H【1】1 戴维森,2 0 0 8【2 1 2 陈黄海,技术2 0 0 0(0 4)参考文献高艳V o l P 技术构架f M】人民邮电出版社,李琥,诸鸿文分组语音通信技术U】通信【3】陆纪文,等构筑宽带智能网一电信级I PP h o n e 解决方案】四川通信技术,2 0 0 1,3 1(0 4)【4】4 汪亚光,汪敏包头压缩技术在V o I P 中的应用【J】上海大学学报(自然科学版),2 0 0 1(0 1)技术相结合运用于数据访问层,一方面能够极大的降低业务逻辑层与数据访问层之间的耦合,进一步遵循“开放一封闭原则”:同时,增强了系统的可扩展性和易维护性,降低了系统升级和移植的难度,最大限度的实现了软件的复用。H参考文献【1】程杰大话设计模式【M】北京:清华大学出版社,2 0 0 7:1 4 1-1 5 7【2】甄镭一N E T 与设计模式p 川北京:电子工业出版社,2 0 0 5 万方数据抽象工厂模式在.NET数据访问层中的应用抽象工厂模式在.NET数据访问层中的应用作者:魏一搏,郭友作者单位:石家庄信息工程职业学院,石家庄,050035刊名:信息系统工程英文刊名:CHINA CIONEWS年,卷(期):2010,(2)被引用次数:0次 参考文献(2条)参考文献(2条)1.程杰 大话设计模式 20072.甄镭 NET与设计模式 2005 相似文献(10条)相似文献(10条)1.学位论文 郑庭明 山东省地下水监测数据管理与发布系统的设计与实现 2007 地下水监测数据是依法管理水文地质、工程地质和环境地质勘查和评价工作的基础数据,实现地下水监测数据管理与发布的信息化建设,可以使广大工程技术人员科学高效地分析山东省地下水环境现状与未来,监测和监督地下水的过量开采与污染,在地质环境保护方面起着重要作用。本文所述山东省地下水监测数据管理与发布系统则是地质环境管理工作信息化建议的重要组成部分。山东省地下水监测数据管理与发布系统的目标是以微软推出的ASp.NET2.0和SQL Server2005为平台,构建一个基于B/S三层结构的应用系统(以下简称Sdpgemis),实现对地下水监测数据录入、管理,提供统计报表分析和空间图形浏览等功能,为地质环境监测和管理服务,同时系统具有较好的可扩展性和可维护性,可以作为行业解决方案在全国各省地质环境监测总站中推广应用,具有很好的应用价值。本文作者负责项目的整个开发过程,独自承担了系统设计和实现的所有工作。首先,本文在介绍项目背景和全文体系后探讨了Web数据库的发展历程:主机/终端客户机/服务器浏览器/服务器,并比较了三种模式各自的优缺点。在此基础上讨论了访问Web数据库的不同方法:中间件技术、客户端技术、PHP技术、J2EE和ASp.NET技术。由于ASp.NET2.0与SQL Server2005无缝集成,提供了大量Web控件和数据库访问控件,因此采用ASp.NET2.0+SQLServer2005来设计和实现Sdpgemis。在Sdpgemis的需求分析和系统的主要功能讨论基础上,设计了三层架构:数据访问层、业务逻辑层和应用层。并通过SQL Server2005平台完成Sdpgemis数据库的设计和实现。然后利用ASp.NET2.0技术使用C语言实现了Sdpgemis的数据访问层、业务逻辑层和应用层。在数据访问层中使用抽象工厂模式,该模式采用泛型接口IDAL用于创建一系列相关或依赖对象,而无需指定其具体类。采用面向对象编程技术实现接口的类项目SQLServerDAL和DALFactory,在DALFactory项目中,使用反射技术实现DataAccess工厂类。使用ASp.NET2.0提供的SQLDataSource和ObjectDataSource数据源控件完成对业务数据库的访问。业务逻辑层中通过建立业务实体Model,将关系数据库中的实体对象转换为业务对象,它们在应用程序层之间共享以相互通信。业务逻辑项目BLL与数据访问层通信以访问业务数据库Sdpgemis中的数据。表示层中使用SQL Server2005通知服务实现SQL数据缓存和使用外观模式和简单工厂模式创造聚合缓存,当SQL Server中的数据发生更改时缓存失效,使得缓存的数据库信息始终保持是最新的,同时利用缓存来降低中间层和数据库服务器上的负载。利用ASp.NET2.0提供的成员资格管理服务,提供一个通用的用户身份验证和管理框架,大量减少了建立和维护用户帐号信息的程序代码,同时保证了应用程序和数据库的安全性。使用SQL Server2005报表服务创建统计报表页面,利用ARCIMS9.2发布地图服务实现空间图形浏览页面。在Web页面中大量使用了ASp.NET2.0提供的Web服务器控件如母版页、数据绑定控件、向导控件和登录控件,使得能快速实现Sdpgemis表示层。Sdpgemis通过软件分层实现了高内聚、低耦合原则,满足易于扩展、维护和重用的要求。2.学位论文 王苏文 设计模式实现的研究与应用 2008 设计模式是在设计面向对象软件过程中知识和经验的记录。它用一系列类结构和对象行为来具体描述其含义,并且在这样一个预先定义的设计结构基础上根据具体应用来完成设计。设计模式的目的就是复用这些面向对象软件设计的成功解决方案以便于这些抽象解决方案的积累和交流。作为软件复用方法中的重要研究方向,设计模式能有效的解决软件设计中的可扩展性和可维护性等问题。尽管设计模式本身并不要求一定用某种语言来实现,但脱离了具体的实现,就无法真正理解设计模式,而且很多技术可以简化设计模式的实现。因此,本文对创建型模式和行为型模式的具体实现进行了深入分析,对两种模式类型存在的缺点分别利用高级程序设计语言中的反射机制和委托机制进行改进,并通过抽象工厂模式和观察者模式分析改进后的效果。文章最后以远程作业系统为背景,详细阐述了如何利用改进的抽象工厂模式与缓存结合来设计系统的数据访问层,以满足系统对异类数据源的要求。并针对系统开发中一些不好的解决方案,总结了一个名为对象状态硬编码于判断逻辑中的反模式,提出一个利用状态模式改进的解决方案,并结合系统的用户管理模块进行阐述。同时,利用改造的状态模式对系统中作业布置这一重要功能进行设计。将模式的思想应用于系统的设计过程中,使得系统更加灵活,易于扩展。3.期刊论文 郭昆.郭朝珍.GUO Kun.GUO Chao-zhen 基Hibernate的GDSS数据访问层的研究-集美大学学报(自然科学版)2005,10(2)简要介绍了群体决策支持系统(GDSS)的发展历程及Hibernate的基本技术思想,提出一种基于Hibernate的GDSS数据访问层的体系架构,该体系架构采用抽象工厂模式以保证在不损失性能的同时提高软件的灵活性.以网络会商群决策支持系统为实例,对该体系架构的合理性和可行性进行具体的研究,并由此总结出在GDSS中应用Hibernate来实现数据访问层的合理的体系架构以及这种体系架构今后的发展方向.4.学位论文 马辉 基于O/R Mapping策略的数据访问层设计与实现 2006 目前的主流开发技术一般需要为每个项目开发一个数据访问层,用它来操作底层数据库和为业务逻辑开发提供服务。面向对象语言的开发环境中原有的数据访问层(如ASP.NET架构中的ADO.NET)使用在面向对象的语言中嵌入SQL语句的方法将对象级别的操作转化为对关系数据库的操作,但是这样不仅破坏了代码面向对象的风格,而且使数据访问层的开发非常烦琐并且容易产生编码错误。O/RMapping或者ORM是Object/RelationMapping的缩写,即面向对象方法中的对象和关系型数据的映射。使用O/RMapping策略的数据访问层替代原有的数据访问层,可以实现面向对象的方法到SQL语句的自动转换,从而可以大大提高开发效率。O/RMapping技术的巨大优越性使它很快成为面向对象开发中的主流开发模式。但是当前.NET语言开发环境下的O/RMapping软件在很多方面还不能尽如人意。为了更好地实现数据访问层的O/RMapping策略,本文设计开发了MyOrm软件,该软件基于O/RMapping策略实现了数据访问层的重新规划。MyOrm在实际的数据库开发项目中进行了应用,取得了很好的效果,证明它对提高开发效率、增加开发自动化程度、减少编码错误具有重要意义。本文列举和讨论了当前主流的O/RMapping软件的实现方案,阐述了MyOrm通过数据库自动生成数据访问层的方法,说明了MyOrm生成的数据访问层结构和MyOrm中实现映射的关键技术。本文的主要工作是:1、设计基于O/RMapping策略的数据访问层,提出数据对象的构造方法和实现O/RMapping策略的方法。2、提出通过定制模板的方式,基于关系型数据库生成数据访问层的方法,实现了数据访问层的自动生成,减少了数据访问层开发工作量。3、使用抽象工厂模式实现面向对象的方法到SQL语句的自动转换,使SQL语句生成过程具有更好的可维护性和可扩展性。5.期刊论文 夏晖.董平.苏力萍.Xia Hui.Dong Ping.Su Liping 基于.Net框架的设备管理系统的设计与实现-微计算机信息2006,22(24)设备管理系统是企业运营过程中必不可少的组成部分.本文以中国教育经济信息网管理中心设备管理系统为例,讨论了设备管理系统的设计与实现,并详细讨论了基于.Net框架的三层结构系统中数据访问层的设计与实现.6.期刊论文 廖江福.谢书童.林剑艺.LIAO Jiang-fu.XIE Shu-tong.LIN Jian-yi 基于文法差异的ADO.NET组件化研究及其应用-西安工程大学学报2010(3)为解决ADO.NET在多数据库访问中因驱动程序API、数据库DDL和DML语言等差异带来的系统性冗余和移植困难等问题,在抽象工厂模式中产品创建责任和消费责任相分离的模型基础上,设计了数据访问层接口和产品族,实现了ADO.NET跨数据库访问及多数据库间的动态移植.结果表明,该方法为数据访问层提供了灵活的动态扩展机制,降低了业务层和数据访问层的耦合度.7.学位论文 刘玉花 松耦合在人事系统开发设计中的应用 2006 随着计算机技术特别是网络技术的发展,软件业面临的环境更加复杂,竞争日益激烈,为了在激烈的竞争中保持优势,要求软件具有良好的性能,这些性能包括:可升级性、可靠性、可用性、可扩展性、可维护性、可管理性、安全性。软件系统的松耦合性是衡量系统内部的层次与层次之间,模块与模块之间的依赖程度的标准之一。软件系统的耦合性包括横向的耦合和纵向的耦合,横向的耦合通常体现在系统的各个模块、类之间的关系,而纵向的耦合,体现在系统的各个层次之间的关系。在软件设计过程中,特别是软件框架的设计过程中,降低软件系统的耦合性是改善软件系统的可维护性,可理解性,可扩展性的关键。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。分层从逻辑上将子系统划分成许多集合,而层间关系的形成要遵循一定的规则。通过分层,可以限制子系统间的依赖关系,使系统以更松散的方式耦合,从而更易于维护。分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为业务层)、表示层。在业务复杂的情况下,三层的基础架构不能满足我们需求的时候,把三层中的某一层再细分为两层或更多层,对象关系映射(Object RelationalMapping,简称O-RMapping)技术是一种把数据逻辑处理层同数据层分离的技术。分层技术是解决系统的松耦合性的非常重要的技术之一,但分层技术本身也有缺陷,为了解决分层带来的缺陷,利用XML技术和元数据技术实现了数据库字段同数据库表的松耦合性,解决了分层引起的级联删除问题。把系统中的公用模块的功能以Windows服务来实现,解决了分层带来的第二个缺陷:分层太多会影响到系统的性能。利用分层技术和O-RMapping技术从纵向上实现了系统的松耦合性。模块之间的松耦合性也是影响系统松耦合性的一个重要因素,在设计过程中使用设计模式可以降低模块之间的耦合程度,设计模式使用抽象耦合和分层技术来提高系统的松散耦合度。典型的实现系统松耦合的设计模式有:抽象工厂模式(Abstract Factory)、命令(Command)模式、观察(Observer)模式、外观(Fa(c)ade)模式等等。利用设计模式从横向上实现了系统的松耦合性。本文首先分析了如何利用分层技术和O-RMapping技术来实现系统架构的松耦合性,接着分析了解决分层技术的两个缺陷的方法。最后分析了如何通过运用设计模式来实现模块之间的松耦合性。通过以上的理论研究,本文结合一个具体的软件系统验证了理论研究的正确性,介绍了该系统的整体框架,如何实现数据库结构的松耦合性和该系统中的Windows服务。并对其中的不足及应该改进的方面作了一定程度的分析。8.期刊论文 伍科松.刘连忠.WU Ke-song.LIU Lian-zhong Web信息系统数据访问层的设计与实现-计算机工程与设计2006,27(23)目前几乎所有的Web信息系统都需要访问持久性数据资源,不同的数据源访问方式也不同,因此实现和封装数据访问越来越成为构建稳定、健壮和灵活的Web应用的基础.在分析了一个真实的Web信息系统的应用环境的基础上,描述了如何使用单例,数据访问对象和抽象工厂模式来设计数据访问层体系结构,解决了多种并行数据源的访问问题,并对该结构面临的问题进行了分析.9.学位论文 张生伟 基于.Net的数据库生成引擎与O/R映射的研究 2005 本文源自高校管理信息系统自动生成器项目的研发,通过对不同的管理信息系统进行分析,抽象出具有代表性的典型的管理信息系统模型,在此基础上实现了基于.Net的高校管理信息系统自动生成器。信息系统代码生成器分为界面设计引擎、数据库生成引擎和代码生成引擎三个模块。本文着重研究数据库生成引擎模块和对象/关系映射组件。本文分析了关系模型以及关系型数据库之间的差异,提出了跨平台的数据库生成引擎的实现方法,具体给出了数据库自动生成的实现思路,并采用设计模式中的工厂模式设计了其架构,开发了高校管理信息系统自动生成器中的跨平台数据库生成引擎。针对界面提出的在关系数据库中持久化对象的需求,本文设计并实现了一个独立的对象持久层,完成对象/关系映射,可以对对象进行保存、更新、查询和删除操作。在对象持久层的支持下,上层模块可以按照面向对象模型对数据建模,对象数据的持久化由对象持久层完成。本文提出了将对象/关系映射设计为独立的组件,使其可以运行在支持组件的应用系统中。实现为组件保证了对象持久层的独立性和可扩充性,并且提供了二进制级别的重用性。当对象持久层的功能不能够满足新的应用需求时,可以随时扩充其功能而不影响已经存在的应用系统。本文分析了普通的数据访问方法和对象/关系映射中数据访问层的设计目标,通过抽象工厂模式屏蔽了应用系统与底层关系数据库的直接耦合关系,实现了一个通用的跨平台数据访问组件。该组件并不绑定在某个特定的关系数据库上,它提供的是一种在关系数据库中持久化对象的通用机制,这保证了它可以重用于不同的应用系统,表现出很好的适应性。10.期刊论文 冯健文.FENG Jian-wen 基于Petshop的Web系统架构设计-电脑知识与技术2009,5(2)基于Internet的企业级应用程序功能日趋复杂,Web系统架构正朝着多层架构的方向发展.分析了基于ASP.NET 2.0的Petshop4的体系架构,重点讨论了数据访问层和业务逻辑层的设计思想,并介绍了抽象工厂模式、策略模式、依赖注入技术和反射技术的应用,最后提出了构建多层Web系统架构的思路.本文链接:http:/