面向接口编程在三层架构系统中的设计及应用.doc_第1页
面向接口编程在三层架构系统中的设计及应用.doc_第2页
面向接口编程在三层架构系统中的设计及应用.doc_第3页
面向接口编程在三层架构系统中的设计及应用.doc_第4页
面向接口编程在三层架构系统中的设计及应用.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向接口编程在三层架构系统中的设计及应用作者:流歌 时间:2009-6-2 12:39:00 点击:747 评论: 1 条 来源:原创 面向接口编程在三层架构系统中的设计及应用黄光芳(湛江师范学院 实验教学管理部 广东湛江 524048)摘要 针对传统的三层架构系统层与层之间的紧耦合问题,论文提出一种新的接口设计模式,将数据层对象抽象出接口,逻辑层调用接口方法访问数据层。数据层将数据实体和数据业务对象分离,减弱两者的依赖,并利用.NET的配置文件和反射功能,使工厂类能直接创建数据对象实例,方便逻辑层的访问。这种接口设计模式降低了数据层与逻辑层的耦合度,保证系统的通用性、标准化和数据库的可移植性。关键词 教学平台 .NET 面向接口编程 三层架构APPLICATION AND DESIGN OF INTERFACE-ORIENTED PROGRAMMING IN THE THREE LAYER ARCHITECTURE SYSTEMHuang Guangfang(Department of Experiment Teaching Management, Zhangjiang Normal University, Zhangjiang 524048, Guangdong, China) Abstract To solve traditional problem of layer and layer tight coupling in three layer architecture system, the paper puts forward a new interface design pattern that the interface is abstracted from the data layer object and the login layer transfers its method to access the data layer. The data layer separates the data entity from the data operation object so that the dependence dies down both. By making use of configuration file and reflection function, the factory class is able to create the data object instance directly, then the logic layer accesses conveniently. The interface design pattern reduces the degree of coupling between the data layer and the logic layer and ensures the systems generality and standard and databases portability. Keywords Teaching platform .NET Interface-oriented programming Three layer architecture 0 引言 在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。每个对象的实现方式或同一个对象的实现方式都可能不一样,要使各个对象之间能相互协作通信及交互,则必须规范定义系统各对象,即从概念层次上进行系统分析设计,从领域专家的角度抽象出具体事物的外在共性的层次上进行接口设计,而不用关心具体的接口实现。 组件对象模型(Component Object Model)是组件对象之间相互接口的规范。所谓接口,其精确定义是“基于对象的一组语义上相关的功能”,实际上是一个纯虚类,真正实现接口的是接口对象1。文中就是基于三层架构系统的网络教学平台中层与层之间的紧耦合的问题,将数据层对象抽象出接口,逻辑层通过调用接口方法访问数据层。数据层将数据实体和业务实体分离,当数据行为改变时并不影响数据实体类,而业务实体则独立于不同的数据库。这样在创建实例时,就相关于创建的对象有多种类别,而每种类别又有不同的实现。在以往的设计中,一般会通过抽象工厂模式创建对象实例,而文中考虑到数据库的可移植性,利用配置文件和反射功能来实现数据对象的创建,方便了逻辑层的调用。1 面向接口编程的网络教学平台的设计 平台采取C#、ASP.NET在windows、VS.NET、DreamWeaver MX 2004环境下进行开发,利用SQLServer2005和Oracle作为平台数据库,采用基于接口模式的B/S三层架构实现平台功能, 整个平台在Windows Server 2003上运行。1.1 平台功能分析 平台主要分有个人空间、课堂空间、资源发布、资源批量下载、智能答疑、专题研讨及视频点播等模块。整个平台经过层层分解,采用自顶向下扩展的方法,把一个复杂的系统分解为多个功能较单一的功能模块。一方面,各个模块既有相对独立性,可以分别加以设计实现,另一方面,模块之间可以通过信息或调用关系等互相关联,共同构成一个整体。如个人空间里所包含的所在课堂空间、个人资源发布管理、个人疑问管理等,都是通过调用其他模块的方法来实现相应的功能。1.2 三层架构 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层,如图1所示。数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,也就是实现对数据表的Select, Insert, Update和Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化2。 业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关。如果涉及到数据库的访问,则调用数据访问层。 表示层:是系统的UI部分,负责使用者与整个系统的交互。 在这一层中,理想的状态是不应包括系统的业务逻辑。表示层中的逻辑代码,仅与界面元素有关。因为这是使用ASP.NET设计的系统,因此包含了许多Web控件和相关逻辑。1.3 平台总体架构 平台采用三层架构,从下至上分别为:数据访问层、业务逻辑层和表示层。每个层实现应用程序一个方面的逻辑功能,通过层与层之间的交互,形成应用程序体系架构,从而实现适应于企业级应用的,功能复杂的应用程序3。 平台共包含9个项目,其中一个Web站点项目,8个类库项目,如图2。2 面向接口编程的网络教学平台的实现2.1面向接口编程设计平台的抽象接口模式主要应用在数据层,系统将数据层对象抽象出接口,方便逻辑层直接调用,如下图3所示。图3 数据层的模块结构图 在数据访问层(DAL)中,采用DAL Interface抽象出数据访问逻辑,Model模块包含了数据实体对象,并以DAL Factory作为数据访问层对象的工厂模块。抽象出来的IDAL模块,脱离了与具体数据库的依赖,从而使得整个数据访问层利于数据库迁移。DALFactory模块专门管理DAL对象的创建,便于业务逻辑层访问。SQLServerDAL和OracleDAL模块均实现IDAL模块的接口,其中包含的逻辑就是对数据库的Select, Insert, Update和Delete操作。此外,抽象出来的IDAL模块,除了解除了向下的依赖之外,对于其上的业务逻辑层,同样仅存在弱依赖关系,因为业务逻辑层只需实例化IDAL模块的接口类后,便可以通过接口方法操作数据库。因此只要不涉及到IDAL的接口定义修改,那么业务逻辑层和数据层的之间的修改都互不影响,保证两层之间的松散耦合。PS:该文发表于2009年6月发表于计算机应用与软件(核心期刊)2.2数据访问层实现接口(1) 数据实体 数据实体主要用于表示数据存储中的持久对象,所有实体类都被放到Model模块中。数据实体可以模拟为一个或多个逻辑表,内容可能来自于一个或者多个数据库中的表中的字段。虽然这些类的属性分别映射了数据表的列,而每一个对象实例也恰恰对应于数据表的每一行,但这些实体类却并不具备对应的数据库访问能力。(2) 数据业务对象 这里所指的数据业务对象是数据层基本的数据库操作,包括Select, Insert, Update和Delete。由于这些业务逻辑对象,仅具有行为而与数据无关,因此它们均被抽象为一个单独的接口模块IDAL,如图4 中的数据表Resource对应的接口IResourceInfo。 将数据实体与相关的数据库操作分离出来,符合面向对象的精神。首先,它体现了“职责分离”的原则。将数据实体与其行为分开,使得两者之间依赖减弱,当数据行为发生改变时,并不影响Model模块中的数据实体对象,避免了因一个类职责过多、过大,从而导致该类的引用者发生“灾难性”的影响4。其次,它体现了“抽象”的精神,或者说是“面向接口编程”的最佳体现。抽象的接口模块IDAL,与具体的数据库访问实现完全隔离。这种与实现无关的设计,保证了系统的可扩展性,同时也保证了数据库的可移植性。在平台中,可以支持SQL Server、Oracle或其他数据库,具体的实现代码分别放在数据层SQLServerDAL或OracleDAL两个不同的模块中即可。(3) 数据对象创建管理 在平台中,一般针对一个数据表或一类数据表创建一个对象,如针对Resource表的ResourceInfo类创建一个对象。在前面的设计中,这些对象已经被抽象为对应的接口,而其实现则根据类的不同而有所不同。也就是说,创建的对象有多种类别,而每种类别又有不同的实现,这是典型的抽象工厂模式的应用场景。而上面所述的两个问题,也都可以通过抽象工厂模式来解决。考虑到数据库的可移植性,系统最后利用配置文件和反射功能来实现,即可以在项目的web.config文件中,配置好具体的Factory对象的完整的类名。然后利用配置文件和反射功能直接指向具体的数据库对象实现类,例如Platform.SQLServerDAL.IResourceInfo。平台使用DataAccess类取代了前面创建的工厂类体系,它是一个sealed类,其中创建各种数据对象的方法,均为静态方法。之所以能用这个类达到抽象工厂的目的,是因为配置文件和反射的运用,如下的代码片断所示:public sealed class DataAccessprivate static readonly string path = ConfigurationManager.AppSettingsDAL;public static IResourceInfo CreateResourceInfo() /直接指向实现类,返回数据访问实例 return(Platform.IDAL. IResourceInfo)Assembly.Load(path).CreateInstance(path+.ResourceInfo ); 2.3业务逻辑层访问接口 业务逻辑层作为接口的访问控制部分,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。在业务逻辑层中,有关数据访问层中数据对象的调用,均利用多态原理定义了抽象的接口类型对象,然后利用工厂对象的工厂方法创建具体的数据对象5。如 Platform.BLL.ResourceInfo类所示:public class ResourceInfo /创建具体的数据对象 private readonly IResourceInfo dal = DataAccess.CreateResourceInfo(); public int Add(Platform.Model.ResourceInfo model) return dal.Add(model); /数据对象调用接口方法添加一条记录 2.4 表示层设计 在业务逻辑层与表示之间采用紧耦合,将核心业务逻辑都放到了一个模块BLL中,如图5。在业务逻辑的处理中,如果存在业务操作的多样化,或者是今后可能的变化,均可以利用抽象的原理,或者使用接口,或者使用抽象类,从而脱离对具体业务的依赖。3 结束语 本文针对传统的面向对象系统数据层及逻辑层耦合度高的问题, 给出了一种实用的接口编程模式。该模式将系统的数据层的接口和实现进一步分离。接口类只定义操作,将数据层访问方法抽象成一个IDAL接口模块, 实现类定义属性和操作的具体实现,保证了系统的通用性和数据库的可移植性。这些设计思想及方案都有极强的通用性,可以给后来的设计人员带来启发和帮助。参考文献1 赵明砚, 姜秀萍, 刘荣梅.一种应用接口编程思想的软件开发平台J.计算机工程与应用, 2001, 21:159-1612 陈冠军.A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论