admin 管理员组文章数量: 1184232
2024年3月28日发(作者:input标签中type的属性值有哪些)
第24卷第1期
浙江万里学院学报
Vo1.24 No.1
2011年1月
Journal of Zheiian ̄Wanli Universi
基于.NET平台的面向对象应用框架的研究与设计
陈忠力 .金刚波
(1.浙江万里学院,浙江宁波315102;2.浙大网新易盛网络通讯有限公司,浙江杭州 310000)
摘要:ESSE.NET是一个基于.NET技术的应用框架,该框架分为三个组成部分:基于MVC模式的表示层、业务
逻辑层、通用数据访问层。本框架不仅适用于.NET的WEB系统开发,也适用于WindowForm系统开发:应用程序
中所使用的数据访问代码几乎不需要改变,就能满足不同厂商的数据库开发,有更好的灵活性和扩展性。
关键词:.Net;软件复用;框架技术;设计模式;面向对象
中图分类号:TP311.52 文献标识码:A 文章编号:1671—2250(2011)01—0074—07
ESSE.NET框架是一个帮助开发人员进行.NET企业应用系统构建的应用框架。框架是一个系统全部
或者部分的可复用设计,通常由一组抽象类和类之间的协作组成。框架一般建立在同一个或相似领域中,
即所要开发的软件系统要具有较强的相似性,通过框架把领域中不变或不易变的部分在一定时间间隔内
固定下来,把易变的部分以用户接口的形式保留下来,从而达到设计和代码的复用。因此,进行ESSE.
NET框架设计时关键点是对目前的.NET企业应用系统进行分析,找出其系统中通用的、不变的部分并在
框架中加以实现.以帮助应用程序开发人员进行开发。
1 E S S E.N ET框架的总体设计
企业应用软件中用户界面的相关处理、数据的表示方式、数据的存取方式、业务服务的提供方式等方
面是所有的企业应用软件所共有的,并且是相似的,因此,这些功能应该在ESSE.NET框架中得到实现。
框架的总体目标:建立一个通用的基于.NET的应用框架。基于这一目标,有以下几个评价指标:(1)功能
完善:能够满足用户所需要的各种功能。(2)通用性强:能够适应不同用户的不同需求,即框架要与具体业
务逻辑的藕合性要低。(3)分层结
构:各层间的祸合性要低,以提高
框架的柔性.并且能根据用户不
同需求进行相应的改变。
这样.传统的三层架构无法
满足要求,于是在ESSE.NET应用
框架中,加了业务逻辑接El层、数
据访问接口层、业务对象层、对象
核心辅助层,总体组建模型设计
如图1所示.框架中组件的内容
以及层与层之间的依赖关系详见
表1 图1 ESSE.NET框架组建模型
收稿日期:2010—05—06
作者简介:陈忠力(1981一),男,浙江温州人,浙江万里学院保卫部助理工程师,研究方向:虚拟机。
・
74 ・
陈忠力,金刚波:基于.NET平台的面向对象应用框架的研究与设计
表1 ESSE.NET应用框架组件说明
第1塑
服务层(本地模式),主要解决业务上~一些逻辑和流程功能,并采用标箍等技术,实
L0CAL
现了事物操作等问题。
业务对象层,定义了对象的一般属性,并继承了ESSE.Core.Bo层核心类,米实现对
ESSE.BO
象数据的脏数据的处理和对象数据的过滤和排序,在属性定义时实现了延迟加载。
对象核心辅助层,主要来处理业务对象的脏数据、过滤、排序等。 ESSE.C0re.BO
2 通用数据访问层的设计与实现
在应用程序设计中,数据库的访问是非常重要的,通常需要将对数据库的访问集中起来,以保证良好
的封装性和可维护性。即编写应用系统时。不因类的不同而受到影响,尽量做到与数据库无关,当后台数据
库发生变更时,不需要更改客户端代码。这就需要在实际开发过程中将这些数据库访问类再作一次封装。
2.1 数据访问层的分析与设计
无论数据层多么复杂,日的都只有一个,即为了包装特定的数据存储代码(例如:连接代码、杏询和存
储过程执行、错误处理以及将数据修改为正确的格式)。}大1此。它可以保护客户的应用程序.使其不受代码
的影响。数据层有多种形式,其一町以像应用程序中的类一样简单,或者和一系列运行在一个专用的服务
程序上的托管组件相同。不管数据层是如何实现的,结果都是一个单独基于.NET平台的应用框架的设计
与实现的数据访问API,无论底层的数据库平台类型如何,对于客户应用程序的开发人员都是一样的。
数据层为客户的应用程序提供一个标准的接口,同时也应该向客户应用程序提供一种灵活性 客户
程序应该选择数据层中的一个数据提供者,数据层利用一个对象来响应这个数据提供者,该对象的方法
可以使用所要求的数据提供者来执行数据库的功能。无论客户应J}j程序所要求的数据提供者是哪一个,
这个对象需要具有相同的方法和属性。如果数据库从一个平台上移植到另外一个平台,客户应用程序几
乎不需要改变。
经过上述的分析,接下来应当选择相应的设计模式来设计数据访问层。设计模式应该具有以下几个
功能:对数据访问本身,允许多种.NET数据提供者;将每一个数据提供者都包装到它本身的“包装器”类
中;具有一个单独的访问点,可以提供一个参数化的对象创建机制;在运行时,客户的应用程序利用该机
制来指定它所需的数据提供者。
经分析,AbstractFactory设计模式能够满足以上要求。使用AbstractFactory设计模式的优点在于:当
客户应用程序想要在运行阶段决定需要使用的对象族时,它能处理相似的对象族。每个对象族都具有它
本身关联的工厂对象,而且所有的工厂对象都是从~个通用的父类中继承而来的。在运行时,客户应用程
序通过选择合适的工厂对象来获得相应对象的对象族,然后利用那个T厂对象来创建一些家庭成员的实
例。数据访问层的模块结构图如图2
可以看到,在数据访问层中,完全采用了“面向接口编程”思想。抽象出来的IDAL模块,脱离了与具
体数据库的依赖,从而使得整个数据访问层利于数据库迁移。DALFactory模块专门管理DAL对象的创
建,便于业务逻辑层访问。SQLServerDAL和OracleDAL模块均实现IDAL模块的接口,其巾包含的逻辑就
・
75 ・
2011年1月 浙江万里学院学报
是对数据库的Select,Insert。Update和Delete
操作。因为数据库类型的不同,对数据库的操
1』蛾 口
作也有所不同,代码也会因此有所区别。
聃啪I
L…
二
I J
l 1一
具体的代码实现步骤为:
黼蟪D^L群鬻的 .
抽象工场DAOFactory类,这个类主要是
了 i 数糌 九蛹’寤问鹩麒持薪久耍辩使囊J-lI的H缸宵据嗣对性鼍..挺啦有印fj为 。
通过配置文件反射来获取应用系统所要使用
的数据库类型,并通过抽象工厂来创建各个对
象的数据方法,具体的实现代码如下:
public abstract class DAOFactory
{
private static DAOFactory
圈2数据访问层的模块结构图
factory;
private static Object locker=new Object();
private static readonly string path=ConfigurationManager.AppSettings[“DAOAssmely”】;
private static readonly string factoryName = ConfigurationManager.AppSettings
[“DAOFactoryClassName”];
public static DAOFactory GetInstance()
{
if(factory==nul1)
{
lock(1ocker)
{
if(factory=:nul1)
{ .
factory=(DAOFactory)Assembly.Load(path).Createlnstance(factoryName);
}
}
}
return factory;
)
///<summary>
///通过工厂建造委托类DAO的实例
///</summary>
///<retums></returns>
public abstract ESSE.SystemManagement.DAO.IDelegationDao CreateDelegation(IDbHelper
///<summary>
,//通过工厂建造权限类DAO的实例
///</summary>
///<returns></returns>
public abstract ESSE.SystemManagement.DAO.ISysPermissionDao CreateSysPermissionDao
(IDbHelper conn);
l
为了更好的体现面向对象的思想,满足业务服务层Domain Model模式的需要,所以在数据访问层中
填充的数据返回都是业务实体对象。而是没有采用.NET框架推崇的Table Module模式下的DataSet对
象,虽然它同样具有面向对象设计的思想,唯一不同的是它获得的对象并非是单纯的领域对象,会丢失面
・
76 ・
陈忠力,金刚波:基于.NET平台的面向对象应用框
public interface IStaffDao
垄鱼 笙 塑
向对象的基本特性,在处理复杂多变的业务逻辑上却变的非常混乱。具体的实现代码如下:
{
#region成员方法
///<summary>
///获得所有人员列表
///</summary>
///<returns></returns> .
BusinessListBase<StaffBo>GetAllStaff();
///<summary>
///根据岗位查看人员
///</summary>
III<param name=“position”>岗位.</param>
///<returns>人员集合</returns>
BusinessListBase<StaffBo>GetStaffsByPosition(PositionBo position);
III<summary>
,//查看该组织的人员
///</summary>
///<param name=“organize”>组织</param>
///<retums>人员集合</returns>
BusinessListBase<StaffBo>GetStaffsByOrganize(OrganizeBo organize);
III<summary>
,//根据人员id获得人员
///</summary>
///<param name:“staffId”>人员ID</param>
///<returns>人员</returns>
St椰0 GetStaff(string staflfd);
}
从代码的接口上可以反应出函
数的返回类型和参数都是实际的业
务对象.从而避免了DataSet对象丢
失面向对象的基本特I生的问题。
3 业务逻辑层的设计与
实现
业务逻辑层(Business Logic
Layer)是系统架构中体现核心价
值的部分。它的关注点主要集中
在业务规则的制定、业务流程的
实现等与业务需求有关的系统设
计,即它与系统所应对的领域逻
辑有关。
77 ・
图3组织管理概念模型
・
2011年1月
3.1 业务对象层分析与实现
浙江万里学院学报
通俗地讲业务对象就是简单的真实世界的软件抽象。应用软件系统,从本质上来说,是计算机对现实
世界的模拟。现实世界中的实体对象,在软件系统中,表现为需要处理的数据。在面向对象的系统中,这是
通过“类”和“对象”来表示的。现在通过一个实际的例子来讲述在设计业务对象实体层时需要注意的问
题。如图3描述了一个普通的企业组织管理CDM概念模型。
由图3可以看到组织管理模型中的对象有4个,分别是人员、岗位、组织、组织级别。现在用代码来实
现岗位这个对象。具体代码如下:
public class PositionBo:BusinessBase
{
III<summary>
,//私有变量:岗位编号
///</summary>
private string positionID=string.Empty;
///<summary>
,,/私有变量:岗位名称
///</summary>
private string fullName=string.Empty:
///<summary>
,//私有变量:描述
///</summary>
private string description=string.Empty;
///<summary>
/,/私有变量:组织
///</summary>
private OrganizeBo organize=null;
///<summary>
,,/岗位名称
///</summary>
public string FullName
{
get
,
{
if(this.IsGhost)
{ ’
LazyLoaderFaetory.GetLoader().LoadPosition()this);
)
return this.fullName;
}
set
(
//值修改过
if(this.fullName!=value)
{
this.fullName=value;
,/传呼属性修改方法,标记该属性已经被修改,通知界面进行更新
this.PropertyHasChanged(“FullName”);
}
)
} .
・
78 ・
陈忠力,金刚波:基于.NET平台的面向对象应用框架的研究与设计 第1
从代码上可以看出,对象实体层只描述了属性,并没有描述行为,即只是反应了对象是什么并没有说
明能干什么。因为应用系统中对象本身的行为是通过业务逻辑层调用数据访问层才反映出来的,所以对
象的行为应当放在数据访问层中,而且在数据访问层中对象的行为应当是最细粒度,因为要符合业务逻
辑层调用不同的对象行为来组合成新的业务需求。
3_2业务逻辑层的分析与实现
业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到数据交换中承上启
下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变
上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么
这种向下的依赖也应该是一种弱依赖关系。因而在不改变接El定义的前提下,理想的分层式架构,应该是
一
个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤
为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调
用者。依赖与被依赖的关系都纠结在业务逻辑层上。
Domain Model模式是典型的面向对象设计思想的体现。它充分考虑了业务逻辑的复杂多变,引入了
Strategv模式等设计模式思想,并通过建立领域对象以及抽象接口,实现模式的可扩展性,并利用面向对
象思想与身俱来的特性,如继承、封装与多态,用于处理复杂多变的业务逻辑。唯一制约该模式应用的是
对象与关系数据库的映射。可以引入ORM工具,或者利用Data Mapper模式来完成关系向对象的映射。
在ESSE.NET应用框架业务逻辑层的设计就是采用Domain Model模式,通过建立领域对象以及抽
象接口,实现模式的可扩展性,并利用面向对象思想与身俱来的特性,如继承、封装与多态,用于处理复杂
多变的业务逻辑。业务逻辑层的模块结构图如图4所示。
4 表示层的设计与实现
表示层(Presentation Layer)的设计可以给系统客户最直
幢务逻蛳膝.挂心的峨
口 舞代鹤椎在奉模块-
接的体验和最十足的信心。本节所关注的表示层设计,还是
以架构设计的角度,阐述在表示层设计中对模式的应用,ASP.
NET控件的设计与运用等。
4.1 MVC模式的应用
表示层设计中最重要的模式是MVC(Model—View—
Controller,即模型一视图一控制器)模式。MVC模式最早是由
宙宙自
SmallTalk语言研究团提出的,被广泛应用在用户交互应用程
图4业务逻辑层的模块结构图
序中。Controller根据用户请求(Response)修改Model的属性,
此时Event(事件)被触发,所有依赖于Model的View对象会
自动更新,并基于Model对象产生一个响应(Response)信息,
返回给Controller。如图5所示。
如果将MVC模式拆解为三个独立的部分:Model、VieW、
Controller,可以通过GOF设计模式来实现和管理它们之间的
关系。在体系架构设计中,业务逻辑层的领域对象以及数据
访问层的数据值对象都属于MVC模式的Model对象. 如果
要管理Model与View之间的关系,可以利用Observer模式,
View作为观察者,一旦Model的属性值发生变化,就会通知
View基于Model的值进行更新。而Controller作为控制用户
请求/响应的对象,则可以利用Mediator模式,专门负责请求/
响应任务之间的调节。而对于View本身.在面向组件设计思
图5 MVC模式交互图
・
79・
2011年1月 浙江万里学院学报
想的基础上,通常将它设计为组件或者控件,这些组件或者控件根据自身特性的不同,共同组成一种类似
于递归组合的对象结构,因而可以利用Composite模式来设计View"对象。
然而在.NET平台下,并不需要自己去实现MVC模式。对View对象而言,ASP.NET已经提供了常用
的Web控件,也可以通过继承System.Web.UI.UserControl,自定义用户控件,并利用ASPX页面组合Web
控件实现视图。ASP.NET定义了System.Web.UI.Page类,它相当于MVC模式的Controller对象.可以处理
用户的请求。由于利用了codebehind技术,用户界面的显示与uI实现逻辑完全分离,即View对象与
Controller对象成为相对独立的两部分,从而有利于代码的重用性。比较ASP而言,这种编程方式更符合
开发人员的编程习惯,同时有利于开发人员与UI设计人员的分工与协作。至于Model对象,则为业务逻
辑层的领域对象。此外,.NET平台通过ADO.NET提供了DataSet对象,便于与Web控件的数据源绑定。
5 结语
在使用.NET进行企业级应用系统开发时,开发者不但需要考虑应用系统程序之间的联系和逻辑,还
要考虑应用系统的业务逻辑。应用系统中程序之间的联系和逻辑具有一定的通用性,每次开发都做着重
复的工作。这无疑影响了软件开发的效率。ESSE.NET应用框架的研发实现了非业务逻辑的公共部分通用
化,并将开发中的这些重复工作进行了抽取,大量的减少了代码编写量。
ESSE.NET应用框架为应用系统开发提供了以下服务:基于MVC模式的表示层:该部分采用应用比
较广泛的MVC模式,支持WEB客户端和WindowForm客户端,通过扩展能过支持其他类型的客户端,很
好的改善了.NET显示与业务分离的特性。业务逻辑层:该部分采用统一标签技术,来处理业务逻辑层中
最负责的事务处理。及通过反射技术及面向接口编程完全分离了表示层和数据层,提高了系统的扩展性
和可移植性。通用数据访问层:该部分采用抽象工厂模式,单例模式等,并结合.NET本身的技术特点,设
计了一个通用的数据访问层。
参考文献:
f1】Xin Chen.应用框架的设计与实现【M】.北京:电子 业出版社,2005.
【2]许天兵.一种面向对象的软件复用框架【J].微型电脑.2001,17(10):18-20.
[3】Mohamed E.Fayed,Douglas C.Schmidt,Object-Oriented application frameworks【J].Communications of the ACM,
1997/Oct,40(1O).
【4】Grant Larsen.Component—Based Enterprise Frameworks[M].Communications of ACM,2000.
Research And Design of Object Oriented Application FrameWork
Based On.Net PlatForm
CHEN Zhong—li ,JIN Gang-bo
(1.Zhejiang Wanli University,Ningbo Zhejiang 3 15 102;
2.ZheDa Innovation Itoueh Network Co.,Ltd,Hangzhou Zhejiang 310000)
Abstract:ESSE.NET is application framework based on.NET technology.It is composed of three parts:
the view layer based on MVC pattern.the layer of business logic,the layer of common data access.It not
only can be apply to Web application,but also can be apply to Window Form application.It can
separate view with business very wel1.The code of accessing database doesn't need be changed to satisfy
with deve1opments based Oil different database system, it has a better flexiblity and expansibility.
Key words:.net;software reuse;framework technology;design pattern;object—orient
(责任编辑:刘阳雄)
・
80 ・
版权声明:本文标题:基于.NET平台的面向对象应用框架的研究与设计 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1711607214a602057.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论