ASP.NET多层架构程序设计
- 格式:pdf
- 大小:269.49 KB
- 文档页数:2
ASP.NET
多层架构程序设计
发表时间:
2009-12-04T11:45:26.577Z 来源:《中小企业管理与科技》2009年10月下旬刊供稿 作者: 黄小龙
[导读] 一般构成系统的模块有:人机交互界面,业务处理模块,这是传统的二层架构设计
黄小龙
(广东电网公司惠州惠阳供电局)
摘要:本文介绍了基于
.NET平台的多层架构分析设计思路,遵循MVC模式建立了一个四层.NET系统架构,并运用多种程序设计模式进行
系统设计,对类依赖解耦,从而提高了系统适应能力、可维护性和可扩展性,保证了系统高效、持久的运作。
关键词:
.NET 多层架构 设计模式 MVC
1
研究背景
近年的Web开发方面的探索方向转向了程序框架和设计模式上,这是因为低耦合、高重用、强扩展性、强持久性、高效率的编程思想
更适合变化万千的电子商务
Web应用开发,让程序员在委托人需求变动、平台改变、混合数据库的情况下可以相对简单的修改程序,提高
维护效率和效果。
2
系统层次分析
架构同“软件架构”定义,是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计;是一个系统的草图,它所描述的对象是
直接构成系统的抽象组件,各个组件之间的连接则明确和相对细致地描述组件之间的通信。在面向对象领域中,组件之间的连接通常用接
口来实现。一个成熟的架构具有以下优点:①安全性:根据业务的需要,可以通过减少访问数据的入口点把一些危险的系统功能给屏蔽
了,从而提高其安全性。②可扩展性:架构的搭建使用了多种设计模式,通过多种策略来提高系统的可扩展性。③可定制性:可以根据客
户群的不同和需求的变化进行调整。④可维护性:搭建架构的目的之一就是为了提高系统的可维护性,通过对各层功能的明确细分提高其
可维护性。
一般构成系统的模块有:人机交互界面,业务处理模块,这是传统的二层架构设计。然而一个系统中操作最频繁的是数据库访问,随
着电子商务系统越来越复杂,持久,高效的数据库访问组件是迫切需要的,因此,新的架构设计中,人们将数据库另立一层,专门为数据
库访问服务。除了数据持久层外,我们还需要一个服务层。对于大型的电子商务系统,跨平台,分布式计算,服务器群互动通信是必不可
少的,服务层设立的意义就是为了实现这些功能。那么我们根据分析,将整个网站的层次分为数据持久层、业务逻辑层、服务层、表示
层。
3
各层次的作用
数据层Persistent 数据持久层是负责管理数据库访问的工作,为维持对数据库持久化操作而建立,该层处于程序框架的最底层,是程
序框架中最重要的一层。本层主要完成
SQL语句生成,链接多种数据库,增删改操作,事务处理,关键字过滤等工作。该层不依赖于其他
层,完全独立工作,供其他层调用。
业务层Business 业务逻辑层主要负责组织业务以及提供数据库基本表的操作,作为表示层和数据持久层的逻辑枢纽,业务逻辑层扮演
了整个系统的功能的核心角色,包含大量处理各种业务的类,类之间的关系繁多,对通用组件和数据持久层的依赖度非常高
[5]。
服务层Service 服务层提供了基于WebService的跨平台服务,使系统可扩展为分布式、互动式的应用程序,同时也为客户端AJAX异步
请求提供服务。
表示层View 表示层主要负责给用户提供视图,实现系统与用户之间的信息互交。无论是C/S模式还是B/S模式,表示层都应该以提高
用户体验为最大目的,提高信息互交的效率和用户满意度。
4
架构运作原理与程序设计模式
通常我们将一个Object:DataObject实体类作为其中一个参数传给DatabaseAssistent或TransactionAssistent的查询方法,而
Object:DataObject
只是作为一个模板,供程序生成更多的Object:DataObject来包装数据。由此看出,Object:DataObject将会经常被作为模
板调用,倘若
Object:DataObject作为静态对象存储在内存中,并且只存在唯一一个,每次DatabaseAssistent或TransactionAssistent需要
模板时都调用它,这样系统性能会得到一定的提高,而且节约了内存资源。这里我们用到了单件模式来实现。使
Common通用层中继承
DataObject
的对象类需要有且只有一个作为模板用的实例,并要求提供一个全局访问点[6]。具体实现使用静态初始化方法,并定义静态私
有变量
_instance、私有构造函数及公共静态方法GetInstance( ),确保该对象类在系统中存在唯一的实例,主要为Persistent数据持久层服
务。
本架构中所使用的单件模式采用懒汉式单件模式(LazySingleton),这是最简单的单件模式的实现方式,但方法存在缺陷,在多线程
访问时会出现问题。假设
common中的有一个地区的对象AreaObject,它的属性中Instance是AreaObject的静态实例,在第一次创建
AreaObject
的时候构造函数AreaObject()会创建一个全局唯一的静态实例。该静态实例会被频繁的访问,但不对该静态实例做修改,因此我
们不必担心会出现多线程操作的危险。除了
common层继承DataObject的对象外,DatabaseManage也是一个经常被访问的类,每次存储数
据都要使用它,因此我们也使用单件模式使之全局唯一。同样,
DatabaseManage也是只读的,此类是线程安全的。DBSession在数据库
访问中提供访问的连接,本架构遵循
.NET标准模式处理非内存资源,实现IDisposable接口以释放非受控资源。Persistence中DBSession类
用以维持数据库对话,该类实现
Dispose()方法供调用以释放资源,方法中调用SuppressFinalize(this)防止调用析构函数对资源重复处理,
实现受保护的虚拟方法
Dispose(bool),用以分解共同事务。
现在我们模拟一次简单的访问,用户通过视图页面对服务器发出请求,服务器中的控制器组织数据传递向下层,触发业务逻辑层的某
方法
Business.MethodA调用数据持久层中Persistent.SQLStatementGenerator类,将以上的字段对象、条件对象和排序对象将交由
Persistent.SQLStatementGenerator
来组织生成SQL语句,然后将此SQL语句和静态的对象模板ObjectA:DataObject交由数据持久层中
Persistent.DatabaseAssistant
,Persistent.DatabaseAssistant调用Persistent.DBConfigurator创建Persistent.DBSession对象对数据库进行
会话,由
Persistent.DatabaseManage执行SQL语句。数据库返回数据,会话结束,调用DBSession.Dispose()回收连接资源。数据将由数
据库向上传递到数据持久层,数据持久层会把每行数据包装在一个相应的
Object:DataObject中并添加到ArrayList,完成所有数据的读取包
装后,
ArryList向上传递,到达业务逻辑层。业务逻辑层接收到ArrayList后,经过加工组织后继续向上传递,控制器接收结果并用ArrayList
组织视图返回给客户端,这样便完成了一次完整的互交。
参考文献:
[1]
张沙清,聂小东,吕诗芸.基于Struts和Hibernate的电子商务系统构建研究[J].情报杂志.2008 72(5):37-39.
[2]
赵洁,肖南峰.基于.NET可裁剪式多层SmartERP的设计与实现.计算机工程.2008年第8期.
[3]
张跃廷,王小科,张宏宇.ASP.NET技术方案宝典[M].北京.人民邮电出版社:2-67.
[4]
张逸.Design & Pattern 《解剖PETSHOP》[DB/OL].2006-11-05 http://www.cnblogs.com/wayfarer.
[5]
孙奥,黄燕,吴平.MVC模式在.NET框架中的应用与实现[J].科技广场.2006.(1):69-71.
[6]Eric Freeman,Elisabeth Freeman.Head First
设计模式(中文版)[M].北京:中国电力出版社.2007.