基于.NET的分层架构及抽象工厂模式在Web开发中的应用

2015-04-30 06:30李璟
软件导刊 2015年4期

李璟

摘要摘要:在软件设计过程中,设计模式是面向对象软件系统的可重用、可靠、巧妙、通用的设计解决方案,可以帮助设计者更快更好地完成软件系统设计。设计模式中的抽象工厂模式为软件系统结构提供了灵活而强大的动态扩展机制,基于.NET反射技术的抽象工厂模式可以简化工厂代码复杂度,被称为.NET反射工厂。介绍了基于.NET反射工厂的Web应用系统分层架构,分析了架构各层次功能,并以Web应用开发中常用的用户登录功能为例,说明了其数据访问层抽象工厂模式的具体实现方法。实验证明,在Web开发中使用.NET分层架构和.NET反射工厂实现软件重用,具有低耦合度、高可靠性、高可维护性及高扩展性的优点,值得推广应用。

关键词关键词:.NET分层架构;.NET反射工厂;抽象工厂模式;Web开发

DOIDOI:10.11907/rjdk.1431028

中图分类号:TP319

文献标识码:A文章编号

文章编号:16727800(2015)004010503

0引言

随着整个IT产业的飞速发展,软件行业逐步走出作坊式的生产模式,向着工程化方向迈进,软件设计者也愈发注重构建具有低耦合度、高可靠性、高可维护性及高可扩展性的软件系统。设计模式是近20年来在软件工程领域取得的重大成就,使得软件开发人员可以更轻松快捷地重用成功的软件设计,大大提高了软件设计的效率和质量。自从20世纪90年代GOF四人组的《设计模式》出版以来,设计模式一直是国内外软件工程领域的研究热点。设计模式中的抽象工厂模式为软件系统结构提供了非常灵活而强大的动态扩展机制,采用.NET反射技术的抽象工厂模式可以简化工厂代码的复杂程度[12]。本文探讨了基于.NET反射技术的Web开发中使用抽象工厂模式实现最大化软件复用的架构及优越性,并实例展示了其具体实现方法,具有实际应用意义和参考价值。

1抽象工厂模式及.NET反射技术

1.1工厂模式与抽象工厂模式

软件行业最经典的设计模式著作是GOF所著的《设计模式——可复用面向对象软件基础》一书,该书共提出了23种设计模式,并将这些模式分为创建型、结构型和行为型三大类[3]。工厂模式是软件设计中最常用的一种创建型设计模式,它为创建一系列相关对象提供了统一接口或接口集,从而隐藏了具体产品类(具体产品类指要实例化的具体类)实例化过程的复杂性和多变性。使用工厂模式,调用者只关心产品的接口无需关心其具体实现。工厂模式根据抽象程度的不同可分为3种:简单工厂模式、工厂方法模式、抽象工厂模式。简单工厂模式没有工厂接口,算不上真正意义上的工厂模式。工厂方法模式提供的所有产品都衍生自同一个接口,而抽象工厂模式所提供的产品则衍生自不同的接口。3种工厂模式中,抽象工厂模式最复杂,也最能体现工厂模式的优点。抽象工厂模式包含抽象工厂、具体工厂、抽象产品和具体产品共4个部分。其中,抽象工厂为创建对象提供了一般接口;具体工厂为抽象工厂的具体实现;抽象产品定义了被创建对象的一般接口;具体产品为抽象产品的具体实现。

1.2.NET反射技术与反射工厂

工厂模式中,具体工厂类的区别仅仅在于返回实例的类型不同[4],若要动态地决定需要创建的具体产品,就可以省略具体工厂类,并提高软件系统的可重用性和可扩展性。.NET反射技术可以完成上述功能。

反射是.NET中的重要机制。反射是动态识别类型信息的能力,它帮助程序设计人员利用一些在程序运行时动态绑定的信息(这些信息在设计时是未知的)去动态地使用某些类型信息。利用.NET反射技术,可以通过将具体产品类名传递给抽象工厂的方法,即通过后期动态绑定需要创建的具体产品类的方法,省略了具体工厂类,这样得到的简化的工厂被称为反射工厂。使用反射工厂的优点是省略了工厂模式中的具体工厂类,降低了代码的冗余度,提高了软件系统的可重用性和可扩展性。如前所述,.NET反射工厂只包含抽象工厂、抽象产品和具体产品3部分。

2基于.NET反射工厂的Web应用系统分层架构

在传统软件设计中,通常将所有程序代码都混合在一起,造成可读性差、耦合度高的缺点,对日后系统的维护和扩展造成极大困难。为了尽量克服以上弊端,系统分层架构思想应运而生,即将系统的各个功能(如数据库访问、业务逻辑、用户界面等)分层,各层之间通过协作来实现整体功能。分层架构的提出,是软件开发思想的一个重大进步,在很大程度上解决了传统软件开发中普遍存在的可读性差、耦合度高和可维护性低的问题。目前,典型的分层架构是三层架构,即自底向上依次是数据访问层、业务逻辑层和表示层,这种典型的分层架构经实践验证是一种合理有效的分层设计。

在实际的基于.NET的Web开发项目中,通常在反射工厂的思想指导下将上述分层架构由原有的三层扩展为七层,分别为表示层(WebUI)、业务逻辑层(BLL)、业务实体层(MODEL)、数据访问抽象工厂层(DALFactory)、数据访问接口定义层(IDAL)、数据访问层(DAL)、数据访问帮助组件层(DBHelper)。这样每个层次完成的功能比较单一,程序代码有规律可循,系统分层架构更加清晰,使得开发人员可以将更多的精力放到业务逻辑的设计上。基于.NET反射工厂的Web应用系统分层架构如图1所示。

3分层架构中各层次功能与实现

3.1表示层

表示层(WebUI)主要是Web系统的UI部分,负责用户与系统之间交互过程中数据的输入验证、输出呈现以及页面状态管理等。

3.2业务逻辑层

业务逻辑层(BLL)是整个系统的核心,它与系统的具体业务及领域有关。业务逻辑层负责按照业务逻辑将表示层提交的数据进行提取、过滤和处理。

3.3业务实体层

业务实体层(MODEL)中的实体类是业务中客观存在的对象数据结构的封装,用于映射数据库的数据表或视图,实体类是单纯数据库表的封装,通常只包括私有变量及对应属性。实体类的作用主要有两个:一是将数据和实际存储区域即数据库表隔离,保证了业务的独立性,提高了可重用性;二是便于在各层之间传递数据。实体层中每一实体类的每一属性都对应某一个数据库表的每一字段,通过实体类参数可以轻松在各层之间传递数据表数据,当要修改这种参数时,不需修改相应的调用接口,这样提高了可维护性。

3.4数据访问抽象工厂层

数据访问抽象工厂层(DALFactory)的作用在于提高数据库的可移植性[5]。当应用系统需要在多个异构数据库之间迁移时,可以采用利用抽象工厂模式动态绑定具体数据库的方法,这种方法几乎不需要修改数据层代码即可完成异构数据库的迁移。如图1所示,具体实现步骤是:首先,在数据访问接口定义层(IDAL)定义数据访问的统一接口集;然后,在数据访问层(DAL)定义实现IDAL接口的访问具体数据库的数据访问类,如访问SQL Server数据库的SQLServerDAL、访问Access数据库的AccessDAL;再在数据访问抽象工厂层(DALFactory)实现.NET反射工厂,创建和管理实现IDAL接口的DAL对象。数据访问抽象工厂层利用.NET反射技术,根据在Web.config配置文件中获取的设置某种具体数据库的属性值,动态创建并返回该具体数据库的DAL对象。在实际应用中,只需改变Web.config配置文件中的某个属性值即可完成数据库的移植。

3.5数据访问接口定义层

数据访问接口定义层(IDAL)抽象出数据访问逻辑的接口集,脱离对具体数据库的依赖,为数据访问层提供统一的数据访问接口,有利于数据库移植。

3.6数据访问层

数据访问层(DAL)的职责是与数据源进行交互,负责对某种具体数据库的访问和操作,实现数据访问接口层中定义的数据访问接口。该层不包含任何业务逻辑,而只关注于数据的访问和操作。

3.7数据访问帮助组件层

数据访问帮助组件层(DBHelper)实现有关访问和操作某种具体数据库的通用方法的类,供在数据访问层中访问和操作某种具体数据库时使用。如SQLServerDAL使用SQLServerDBHelper类、AccessDAL使用AccessDBHelper类。

4数据访问层抽象工厂模式具体实现

以Web应用开发中常用的用户登录功能为例,说明基于.NET反射工厂的Web应用系统中数据访问层抽象工厂模式的具体实现方法。

4.1Web.Config配置文件设置

在Web项目的Web.Config文件中的配置节内设置相应内容,依次是SQL Server数据库和Access数据库的连接字符串和DAL命名空间路径:

系统在运行时,根据Web项目的Web.Config配置文件中的配置节配置数据库。由上述代码可知,系统在运行时根据配置节的相关配置值动态创建了SQL ServerDAL数据库对象,即整个系统访问的数据库是SQL Server数据库。而如果要将整个系统访问的数据库迁移为Access数据库,仅将读取配置文件AppSettings的键名由“SQLDAL”改为“OleDbDAL”即可,这很好体现了抽象工厂模式的优越性[67]。

5结语

采用分层架构开发Web应用系统,降低了系统的耦合性,可适应不断变化的业务需求,能有效降低设计和维护成本。在数据访问层采用.NET反射工厂技术可以方便地访问和迁移异构数据库,很好地实现了软件重用。

参考文献参考文献:

[1]甄镭..NET与设计模式[M].北京:电子出版社,2005.

[2]GOF.设计模式:可复用面向对象软件的基础[M].北京:机械工业出版社,2000.

[3]李鹏.基于.NET反射机制和组件复用的中小型离散制造企业MES配置系统研究[J].软件导刊,2012,11(8):9193.

[4]刘军华.工厂设计模式在WEB教育资源管理系统中的应用[J].长沙通信职业技术学院学报,2010,9(4):3135.

[5]薛晓萍.基于.NET平台的分层架构与设计模式应用研究[J].惠州学院学报:自然科学版,2011(6):4043.

[6]JAMES W COOPER.C#设计模式[M].北京:电子工业出版社,2003.

[7]刘润东.UML对象设计与编程[M].北京:北京希望电子出版社,2001.

责任编辑(责任编辑:孙娟)