数据抽象层应用

2024-06-29

数据抽象层应用(精选4篇)

数据抽象层应用 篇1

一、引言

一个易于维护和升级的Web应用程序离不开数据库的支持, Web应用程序通过SQL语言实现对底层数据库的数据存取以及查询、更新和管理操作, 但由于数据库厂商不同, 即使同一厂商不同数据库版本在使用SQL语言的很多细节上都有所不同。当基于三层架构的Web应用程序的底层数据库由Access更换为SQL Server或者Oracle, 需要对程序的数据库访问层进行修改[1]。在设计数据访问层时采用抽象工厂模式不仅可以实现系统数据库选择, 而且还可以增强程序的复用性、可扩展性及可维护性。

二、抽象工厂设计模式

抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态[2]。抽象工厂模式 (Abstract FactoryPattern) 提供一个创建一系列相关或相互依赖对象的接口, 而无须指定它们具体的类[3]。在该模式中, 为客户提供请求服务的是抽象工厂和抽象产品。

Web应用程序对底层数据库的操作可以归纳为添加、删除、修改和查询四类。当对数据执行添加、删除、修改操作时, 会返回该操作所影响的记录行数;当对数据执行查询操作时, 返回数据集或返回结果的第一行第一列的值。因此封装抽象工厂Abstract Data Access, 用于声明创建抽象产品对象Execute Non Query、Execute Data Set、Execute Scalar的操作接口;封装实体工厂SQLData Access和Ole Db Data Access, 分别用于创建具体产品对象SQLExecute Non Query、SQLExecuteData Set、SQLExecute Scalar和Ole Db Execute Non Query、Ole Db Execute Data Set、Ole Db Execute Scalar, 实现对SQL Server数据库和Access数据库的操作。数据库操作抽象工厂模式结构如图1所示。

三、抽象工厂模式在数据访问层的应用

Visual Studio 2008是微软提供的用于开发.Net Web应用程序的工具, 具有方便、灵活、开发效率高、安全性强、完整性强等 特性。在Visual Studio 2008上构建三 层架构的Web应用程序, 在数据访问层采用抽象工厂设计模式。

1、封装数据访问接口

数据访问接口提供数据访问功能的基本接口, 实现功能的参考代码如下:

2、封装抽象工厂

3、封装实体工厂

4、封装数据访问类

四、总结

在数据访问层采用抽象工厂设计模式实现了系统在不同数据库之间的更换, 增强了系统的复用性、可扩展性及可维护性。应用抽象工厂模式可以实现高内聚低耦合的设计目的, 系统对扩展开放, 对修改封闭, 通过扩展增强其功能。

参考文献

[1]魏一博, 郭友.抽象工厂模式在.NET数据访问层中的应用[J].信息系统工程.2010, 2:62-63, 59.

[2]王德永, 樊继.抽象工厂模式在多种数据库访问程序中的应用[J].机电产品开发与创新.2009, 22 (6) :115-116.

[3]贾延明, 张永涛.抽象工厂设计模式在MIS中的应用[J].计算机系统应用.2011, 20 (1) :205-207.

数据抽象层应用 篇2

在系统的数据访问层设计中,将设计模式中的抽象工厂模式与.NET的反射机制相结合设计的数据访问层能够很好的解决这方面的问题。

一、抽象工厂模式概述

设计模式早期出现在建筑业、制造业等领域中,设计模式也同样适用于面向对象的程序设计中。越来越多的人们己经认识到,在软件项目开发的过程中出现的许多问题都是由于开发人员没有很好地学习和利用前人的经验,而导致这种现象出现的一个很重要的原因就是人们在系统开发过程中不重视甚至忽略了对前人经验的总结和加工,这就是设计模式所要解决的问题。在软件设计中使用设计模式的根本原因是为了代码复用,增加系统的可维护性。

抽象工厂模式是创建型模式中的一种,是各种形态的工厂模式中,具有更高层次抽象性的一种工厂模式形态。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定具体产品的情况下,创建多个产品系列中的某个产品对象。

二、抽象工厂模式在数据访问层中的应用

抽象工厂模式的结构如图1所示。可以看出,Client使用的是派生自两个不同抽象产品类的对象。首先,客户对象并不知道自己使用的产品是哪一个,因为产品对象的创建是工厂对象的责任。其次,客户对象也并不知道自己使用的特定工厂对象是哪个,因为它只知道自己拥有一个抽象工厂对象(Abstractfdcory),而抽象工厂对象拥有两个实体工厂对象,即ConcreateFactoryl和ConcreateFactory2。这样,就实现了对客户对象封装了关于使用哪些服务者对象的选择细节。

将抽象工厂模式运用到传统的数据访问层后,数据访问层简洁结构如图2所示。在使用抽象工厂模式时,同系列的“产品”必须有公共的接口,IDAL就是SQLServerDAL和AccessDAL的公共接口程序集,负责提供实现数据访问层必须功能的接口,而SQLServerDAL和AccessDAL分别负责实现具体访问SQLServer数据库和Access数据库的数据访问层功能,它们是具体的“产品”系列。AbstractFactory是一个抽象工厂接口,它里面包含创建所有需要的数据访问层功能对象的接口方法,而SQLFactory和AccessFactory就是具体的工厂,它们实现了AbstractFactory中的抽象方法,负责创建具体的数据访问层功能对象,即SQLServerDAL和AccessDAL中的“产品”。在运行时,如果需要通过数据访问层访问数据,只需在业务逻辑层通过Abstractfactory创建正确的工厂实例即可。

使用抽象工厂模式的最大好处是易于交换产品系列,如果需要将系统数据库由SQLServer更换为Access的话,只需在BLL中更改实例化的具体工厂对象即可。这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂就可使用不同的产品配置。而同时,通过使用这种方式,使具体的创建实例过程与BLL分离,BLL是通过它们的抽象接口来操纵实例的,产品的具体名称也被具体工厂的实现分离,不会出现在BLL的代码中。

仍然存在的问题在于,虽然在使用抽象工厂模式后使得系统可以更方便的切换数据库的访问代码,但是如果变更的需求是来源于数据访问功能的增加,那么我们至少需要在IDAL、SQLServerDAL和AccessDAL中增加相应的功能接口和实现,还需要更改AbstractFactory SQLFactory和AccessFactory中的代码才能够实现。

这个问题虽然可以通过使用简单工厂模式进行改进,即抛弃AbstractFactory SQLFactory和AccessFactory三个工厂,转而通过一个简单工厂将客户端与数据访问解耦,但是在更换新数据库如Oracle时还是要在DALFactory工厂中添加相应的代码。这个问题的解决在使用.NET的反射技术后迎刃而解。

在系统的设计中,通过反射技术可以使用类型名称字符串来实例化对象的功能,将实例化具体“产品”的工作在DALFactory中通过反射技术+系统配置文件的方式来实现,从而彻底解决数据库访问时的可维护、可扩展问题。运用反射后,可得到的数据访问层结构如图3所示。

三、结束语

将设计模式中的抽象工厂模式和.NET中的反射技术相结合运用于数据访问层,一方面能够极大的降低业务逻辑层与数据访问层之间的耦合,进一步遵循“开放-封闭原则”;同时,增强了系统的可扩展性和易维护性,降低了系统升级和移植的难度,最大限度的实现了软件的复用。

参考文献

[1]程杰.大话设计模式[M].北京:清华大学出版社,2007 141-157.

.NET抽象工厂三层架构的应用 篇3

界面层是位于最外层, 离用户最近的层, 用于显示数据和接收用户输入的数据, 为用户提供一种交互式操作界面。界面层一般为Windows应用程序或Web应用程序。

数据访问层主要实现对数据保存和读取操作, 即增删查改。数据访问层通常为类库。

业务逻辑层是界面层和数据访问层之间通信的桥梁, 主要负责数据的传递和处理, 例如数据的有效性的检查、业务逻辑描述等相关功能。业务逻辑层通常为类库。

三层的依赖关系如图1所示。

说明:箭头表示依赖方向。界面层依赖业务逻辑层, 业务逻辑层依赖数据访问层, 业务实体属于业务逻辑层, 三层界面层、业务逻辑层、数据访问层都依赖业务实体。

业务实体类, 在项目中对应着数据库中的表, 数据库中有几个表就有几个实体类。

这里以“学生信息管理系统”为例, 实现对学生信息的查询。

1 数据库、数据表

在SQL Server2005中新建Student Info Manager数据库, 在该数据库中新建学生信息表Student Information, 添加字段SNo (int, 标识类型) , 字段SName (nvarchar (10) ) , 字段SSex (char (2) ) 。

2 存储过程

存储过程usp_Sel Student。使用存储过程可以使.NET应用程序中的数据访问代码变短, 而且易读、安全。

usp_Sel Student存储过程中3个带入的参数 (已知的变量) , @fields字段名, @condition条件 (=, like) , @values值。当3个参数都为空时, 查询Student Information表中所有的记录。字段名为“班级”时, 对学号前六位进行查询, “=”前6位精确查询, 后两位模糊查询, “like”模糊查询。字段名为“学号”时, “=”对学号精确查询, “like”模糊查询。字段名为“性别”时, “=”对性别精确查询, “like”模糊查询。

对Student Info Manager数据库, “新建查询”, 新建一个存储过程:

3 实体类

一个实体类由private或protect的字段, public的属性组成。表中有多少字段, 实体类中就有多少属性、字段。表中字段类型要与属性的类型相匹配, 如表中varchar, char, nvarchar类型对应C#中的string类型。

新建“控制台应用程序”Student Infomation Management, 并创建解决方案。新建“类库”Student Info Model, 添加进解决方案。在Student Info Model类库下新建类Student Info, 添加Student Info类代码。

也就是封装Student Infomation表中的字段。

4 配置文件

配置文件中指出数据库的连接参数, 数据库的拥有者, 以及使用的数据库管理系统。

添加新项“应用程序配置文件”App.config, 指定数据库连接参数, 定义一个数据库管理系统类型的变量DBType代码如下:

5 数据访问层

数据访问层主要实现对数据保存和读取操作, 即增删查改。数据访问层通常为类库。只有在数据访问层中使用到的与数据库管理系统的数据访问类System.Data、System.Data.Sql Client。而其他层不再直接与数据库管理系统交互、传递数据, 其他层间交互、传递的是实体类, 或着是实体类集。

数据访问层类的个数, 一般是与表的个数一致的。一个表或一个实体类对应一个数据访问层的类, 但可以有一些共有的数据访问类。

查询方法中, 带入的参数是查询的已知条件。方法名带出一个实体类或一个实体集List或IList。

添加、修改方法中, 带入的参数是整条记录, 或是插入记录的部分字段。方法名可以带出影响的行数, 或着是成功与否的信息, 或者不带出任何参数。

删除方法中, 带入的参数是要删除记录的主键值。方法名可以带出影响的行数, 或着是成功与否的信息, 或者不带出任何参数。

在“学生信息管理系统”中实现对学生信息的查询。

新建“类库”Student Info DAL, 添加进解决方案。在Student Info DAL类库下新建文件夹SQL, 在SQL文件夹下新建类Student Info Service, 添加引用Student Info Model和System.Configuration, 添加Student Info Service类代码。

(1) 添加命名空间代码

(2) Student Info Service类中添加代码

6 业务逻辑层

业务逻辑层是界面层和数据访问层之间通信的桥梁, 主要负责数据的传递和处理, 例如数据的有效性的检查、业务逻辑描述等相关功能。业务逻辑层通常为类库。业务逻辑层交互、传递的是实体类, 或着是实体类集。

新建“类库”Student Info BLL, 添加进解决方案。在Student Info BLL类库下新建类Student Info Manager, 添加引用Student Info Model和Student Info DAL, 添加Student Info Service类代码。

业务逻辑层类的个数, 一般是与数据访问层的个数一致的。一个数据访问类对应一个业务逻辑层, 即一个表或一个实体类对应一个业务逻辑层。

一个业务逻辑层类的方法, 一般是与相应数据访问层类的增删查改的方法是对应的。

(1) 添加命名空间代码

(2) Student Info Manager类中添加代码

业务逻辑层中没有有效性检查, 则代码较少, 直接调用数据访问层对应类的方法。

业务逻辑层中如果有有效性的检查, 代码则长些, 如登录时要检查用户的用户名、密码是否正确。在数据访问层添加方法来检查用户是否存在, 存在返回用户实体类。在业务逻辑层中先检查用户名、密码是否为空, 用户名、密码是否规范 (长度, 是否用标点符号) , 再调用数据访问层检查用户是否存在, 从得到的实体类中判断密码是否正确。

7 界面层

界面层是位于最外层, 离用户最近的层, 用于显示数据和接收用户输入的数据, 为用户提供一种交互式操作界面。界面层一般为Windows应用程序或Web应用程序。

界面层添加引用, 项目中的引用BLL层:Student Info BLL和Model层:Student Info Model。

在Student Infomation Management项目中, 添加新项“Windows窗体”Sel Form.cs。在窗体中添加如图2所示的控件。

单击cbo Fields右上角的三角符号, 选中“编辑项”, 在“字符串集合编辑器”中添加“班级”、“学号”、“姓名”、“性别”。

单击cbo Condition右上角的三角符号, 选中“编辑项”, 在“字符串集合编辑器”中添加“=”, “Like”。

单击dgv Student Info右上角的三角符号, 选中“编辑项”, 编辑表格dgv Student Info的列colsno:Data Property Name属性为SNo, Header Text属性为学号。列colsname:Data Property Name属性为SName, Header Text属性为姓名。列colssex:Data Property Name属性为SSex, Header Text属性为性别。

添加代码:

综上所述, “三层架构”是一种思想, 它将程序设计分为“数据访问层”、“业务逻辑层”和“界面层”。用三层架构主要是使项目结构更清楚, 分工更明确, 有利于后期的维护和升级。但它会带来执行速度上的损失, 这是相对于非分层的应用程序来说的。是否采用“三层架构”模式进行系统开发, 需要进行比较和权衡的。

参考文献

[1]明日科技.SQL Server2005开发技术大全[M].北京:人民邮电出版社, 2007.

[2]周峰.Visual C#.NET2005中文版基础与实践教程[M].北京:电子工业出版社, 2007.

数据抽象层应用 篇4

所谓模式,简单的讲就是一个较好的研究的摸板。而设计模式就是设计摸板。多年前,一个名叫克里斯托佛·亚历山大的建筑师对建筑,街道等人类所建造的各种生活空间进行了大量的观察发现后,优秀的结构都有一些共同之处。在寻找和描述设计质量的探求中,亚历山大认识到,必须观察为了解决同样的问题而设计不同结构。通过观察解决相似问题的不同结构可找出设计之间的相似之处。他将这种相似之处称为模式。亚历山大对模式的定义是“在某一环境下对某个问题的一种解决方案”。模式是一条由三部分组成的规则,它表示了一个工作环境、一个问题和一个解决方案之间的关系。每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。

模式的描述包括以下内容:

1)模式的名称;

2)模式的目的;

3)实现方法;

4)限制和约束因素;

亚历山大在1970年代编制了一本汇集设计模式的书。但是这种设计模式的思想在建筑设计领域里的影响远没有后来在软件开发领域里使用的广泛。

1 软件设计模式概述

软件开发中存在大量相同的方式解决重复出现的问题,是否可以用模式的方式来设计软

件呢?于是就出现了软件设计模式(面向对象的软件设计)。将设计模式引入软件设计和开发过程的目的在于充分利用已有的软件开发经验,这是因为设计模式通常是对于某一类软件设计问题的可重用的解决方案。优秀的软件设计师都非常清楚,不是所有的问题都需要从头开始解决,他们更愿意重复用以前曾经使用过的解决方案,每当他们找到一个好的解决方案,他们会一遍又一遍地使用,这些经验是他们成为专家的部分原因。设计模式的最终目标就是帮助人们使用优秀的软件设计师的集体经验,来设计出更加优秀的软件。

“四人帮”(GOF)模式被认为是所有其他模式的基础,23种设计模式分为3类:创建型模式(Creational Pattern),结构型模式(Structural Pattern)和行为型模式(Behavioral Pattern)。抽象工厂设计模式是这23种设计模式中的一种。

2 抽象工厂设计模式概述

2.1 简单工厂模式

简单工厂模式不能说是一个设计模式,但它在实际的编程中经常被用到,而且思想也非常简单,说它是一种编程习惯可能更恰当些。它的作用是实例化对象,被创建的实例通常都具有共同的父类或接口,它的优点是用户可以根据参数获得对应类的对象,通过它,外界可以从直接创建具体产品对象的尴尬中摆脱出来。简单工厂的结构如图1所示。

从图1的结构上可以看出,客户只需知道父类和工厂,工厂是整个模式的核心,简单工厂模式能够适应一定的变化,但是它所能解决的问题是远远有限的。它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂了。

2.2 抽象工厂设计模式

抽象工厂设计模式向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,创建多个产品族中的对象。抽象工厂设计模式可以实现一次创建一系列相互依赖对象的需求,其结构如图2所示。

从图2所示,整个模式中有以下几类:

抽象工厂:主要功能是生产抽象产品。

抽象产品:主要功能是提供实体产品访问接口。

实体工厂:主要功能是生产实体产品。

实体产品:主要功能是实现功能。

3 抽象工厂设计模式在数据访问中的应用

在我们使用三层结构开发应用系统中,在数据访问层使用抽象工厂设计模式,可将图2.2进行改造,得到如图3所示。

如图3所示:实体工厂包含有SQL Server和Access两种。它们分别生产实体产品访问对象;抽象产品提供实体产品数据访问接口;实体产品根据实体工厂的数据访问类型SQL Server和Access,分别实现不同的数据访问。

以OA办公管理系统为例创建三层及数据访问,1)创建数据访问层的基本架构,创建抽象工厂OADataFactory,创建抽象产品OAData;2)实现数据访问接口;3)完成对象创建;4)完成三层调用。OA办公管理系统三层依赖关系如图4所示。

如图4,在OADAL数据访问层中根据访问数据库的不同,分别实现Sql Server、Access或者其它数据库的访问功能。在抽象工厂OADataFactory项目中分别创建抽象工厂类AbstractDataFactory、SqlServer实体工厂类SqlDataFactory和Access实体工厂类AccessDataFactory。其中AbstractDataFactory用于提供数据访问对象的创建,其相关代码为:

SqlDataFactory用于实现Sql Server数据库访问对象的创建,AccessDataFactory用于实现Access数据库访问对象的创建。

在业务逻辑层调用数据访问层时,通过抽象工厂调用实体工厂,实体工厂中的实体产品给抽象产品,抽象产品调用数据访问方法。

4 结束语

使用抽象工厂设计模式实现数据访问功能,可以提高系统使用数据库的选择,同时也可以降低业务逻辑层和数据访问层之间的耦合。系统无论使用Sql Server数据库或者Access数据库都不受任何影响

摘要:设计模式分创建型模式,构型模式,和行为型模式。抽象工厂设计模式是其中的一种,它向客户端提供接口,使得客户端在不必指定具体类型的情况下,创建多个对象。抽象工厂设计模式可以实现一次创建一系列相互依赖对象的需求,在实现数据访问功能中用于提供系统使用数据库的选择,同时也可以降低业务逻辑层和数据访问层之间的耦合。

关键词:数据访问,抽象工厂设计模式,抽象工厂,抽象产品

参考文献

[1]杨莉..net应用[M].北京:电子工业出版社,2009.

[2]王翔.设计模式——基于C#的工程化实现及扩展[M].北京:电子工业出版社,2009.

【数据抽象层应用】推荐阅读:

逻辑数据层10-18

抽象理论10-15

抽象05-11

抽象绘画06-11

抽象特征06-26

抽象艺术06-29

抽象函数07-03

抽象教学07-27

抽象美术08-01

抽象逻辑08-15

上一篇:现代管理的必由之路下一篇:赫尔辛基