探索中国CIO人才现状 | 第四季调研报告
基于ASP.NET三层结构软件的研究与开发
2014-03-04  作者:e--works 

  0引言


  随着互联网应用软件的发展以及组件技术的出现,软件体系结构逐渐从原c/s结构方式向更适合互联网应用的B/S结构模式转变,两层的C/S结构也逐渐转向三层或多层结构。软件的应用环境在不断变化,用户对软件系统的要求也越来越高,由此基于传统的软件开发模式开发的软件系统存在一些问题。三层体系结构是在客户端与数据库之间加入了一个中间层,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过对象组件模型(ComponentObjectModel,COM)/分布式对象组件模型(DistributedComponentObjectModel,DCOM)与中间层建立连接,再经由中间层与数据库进行交互。这种方式在一定程度上改变了软件开发的模式,提高了软件系统的可用性、稳定性和兼容性。


  1ASP.NET三层结构概述


  Microsoft.NETFramework是微软推出的一套开发平台。ASP.NET可以使用.NET平台来快速方便地部署三层架构。ADO.NET的数据库访问基础是.NET数据供应器(DataProvider)。显示层放在显示页面中,数据库操作和逻辑层用组件来实现,这样就能很方便地实现三层架构。在ASP.NET2.0中,典型的三层架构包括表示层(即页面及后台代码)、业务逻辑层(即业务接口、业务实体、业务逻辑)和数据访问层。三层架构示意图如图1所示。


  2.2业务逻辑层


  业务逻辑层的核心模块包含了整个系统的核心业务。在业务逻辑层中,不能直接访问数据库,而必须通过数据访问层。业务逻辑层将表示层提出的请求转换为对数据访问层的请求,并将数据服务层返回的结果提交给表示层。对数据访问业务的调用是通过接口IDBAccess完成的。既然与具体的数据访问逻辑无关,则层与层之间的关系是松散耦合的。如果此时需要修改数据访问层的具体实现,只要不涉及到接口定义,那么业务逻辑层就不会受到任何影响。例如,在应急救援系统中,用于处理业务逻辑和分析的功能模块有应急资源调度模块、应急预案管理模块、报警方案形成模块、报警通知模块等;网上购物系统的库存管理、物流管理、客户关系管理和客户订单管理都可以放在业务逻辑层中实现。业务逻辑层包含了业务对象本身以及应用于它们的规则。这也是主要业务对象所在的位置。它们实现业务实体或系统对象。系统的业务规则将在这些对象中编码,即从表示层接收请求,根据编码的业务规则处理请求,从数据访问层获取数据或将数据发送到数据访问层,将处理结果传递回表示层。部分处理方法描述如表4所示。


  对系统功能的扩展,主要是指在业务逻辑层中增加各种业务处理与分析逻辑的应用,业务对象的实现,则使用C5的标准类库,建立数据存取对象,并根据ASP.NET2.0提供的接口标准予以编写,从而实现系统结构化。


  2.3表示层


  表示层是三层结构中用户与系统的交互层,设计中最重要的模式是模型~视图一控制器(Model-ViewController,MVC)模式。在.NET平台下,不需要自己去实现MVC模式。就视图对象而言,ASP.NET已经提供了常用的控件,非常方便,也可以通过继承Systerm.Web.UI.UserControl,自定义用户控件,并利用页面组合控件来实现视图。表示层的设计与实现均遵循以下特点:要有方便、友好的客户交互界面。


  3三层架构给系统的优点


  (1)结构清晰、耦合度低。采用三层结构将表示层和业务逻辑层分离。客户端和应用服务器、应用服务器和数据库服务器之间的通信可以通过中间件或者相关程序来实现。当数据库或者应用服务器的业务逻辑改变时,客户端并不需要改变,反之亦然,从而大大提高了系统模块的复用性,降低了维护费用。


  (2)便于系统扩展。模块化使得系统很容易在纵向和水平两个方向拓展。一方面可以将系统升级为更大、更有力的平台;另一方面还可以适当增加规模,以增强系统的网络应用。


  (3)利于开发任务同步进行。大型的软件系统开发过程中,一个好的分层式结构,可以使开发人员的分工更加明确。一旦定义好各层次之间的接口,负责不同逻辑设计的开发人员就可以各司其职,同步开发。这样就可以开发进度迅速提高。


  4结语


  基于ASP.NET三层架构的软件开发已经成为一种流行的开发模式,也带来了很多开发上的优点,适合开发应用需求灵活的系统,一定程度上保证了系统的可扩展性和可移植性。当然三层架构软件开发模式也有一定的缺点。例如,相对于非分层的应用程序,执行速度不够快,不适合对执行速度要求高的系统。实践证明,多层架构开发模式的应用是一条比较好的软件系统开发途径。


  数据访问层主要是对原始数据的操作,具体来说是为业务逻辑层或表示层提供数据服务。在实现的时候要保证“数据访问层”中函数功能的原子性。


  业务逻辑层主要负责对数据层的操作,也就是说把一些数据层的操作进行组合。其目的是将“数据访问层”的基础存储逻辑组合起来,形成一种业务规则。


  表示层指应用程序中实现的客户端。用户服务主要是Web客户端和Windows客户端,也可以是其他平台应用程序,主要作用是对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。


  2具体解决方案


  2.1数据访问层


  在数据访问层中,完全采用“面向对象接口编程”思想,以使用创建型设计模式中的工厂模式为主。根据一个工厂类传入的参量决定创建出哪一类产品类的实例。抽象出来的数据库访问模块,脱离了与具体数据库的依赖,从而使得整个数据库访问层利用数据库迁移。由于数据库类型的不同,对数据库的操作也有所不同,代码因此也会有所区别。


  所有的类和方法都放在工厂DBAccessFactory中,通过接口IDBAccess向外提供服务(见表1)。在工厂DBAccessFactory中,最高层静态父类IDBAccess包含了一些基本方法;抽象类DBAccess继承类IDBAccess,定义了一些常用变量和公用的抽象和实例。对于不同的数据库,定义一个不同的类,这些类继承类DBAccess,并根据不同数据库实例化了父类的抽象方法,同时该类还包含了针对不同数据库的个性方法。部分类的部分变量和方法描述如表1~表3所示。


  SQL类、DB2类和MySQL三个类中的变量和方法类似于Oracle类,在此不再详述。