admin 管理员组文章数量: 1086019
2024年3月28日发(作者:pg3)
维普资讯
第15卷第2期
Vo1.15 No.2
北京电子科技学院学报
Journal of BeiJing Electronic Science and Technology Institute
2007年6月
Jun.2007
MVC设计模式在.NET三层结构开发中的研究和实现
徐朝辉,樊银亭
(河南工业大学信息科学与工程学院,河南省郑州450001)
摘要:为了克服当前应用.NET开发技术的种种弊端,本文首先介绍了MVC设计模式的概念及WEB
三层结构技术,接着提出了MVC设计模式在.NET三层结构开发中的应用模型并讨论了该应用模型在.
NET环境下的实现过程,最后对MVC在.NET下的使用特点及不足之处进行了分析。
关键词:MVC;设计模式;三层结构;ASP.NET
中图分类号:TP393 文献标识码:A 文章编号:1672—464X(2007)02-0070-04
Research and Implementation of MVC Design Pattern in Development of
.
NET with Three Tier Structure
XU 舯 ,FAN啊n-_tiI.g
l School of Information ciSence and Engineering,Henan Universily of Technology,Zhengzhou
450001,China)
Abstract:To overcome the disadvantages of current application development technology of.NET.This paper
ifrstly introduces the concept of the MVC design pattem and three-tie structure technology,secondly,n a
application model of MVC in.net wih tthree tie sU'ucture is put forward and realizing of the model in.NET
environment are discussed;finally.the characteristics and disadvantages of he appltication about MVC in.NET
ale analyzed.
Keywords:MVC;desin pattgem;three tier slructure;ASP.NET
0引言
ASP.NET是微软最新推出的新型体系结构.NET框架
(控制器)的简称。最初是在20世纪70年代由施乐(Xerox)
公司的Palo Alto研究中心提出的。MVC模式最先被用来在
第一代基于视窗的计算机上管理GUI和用户交互。近些年
广泛应用在J2EE平台上,近两年来,随着ASP.NET技术在
大型WEB应用上的地位得到巩固.MVC这个最广为人知、
最著名的设计模式在.NET平台上也逐渐开始得到应用,并
已成为当今设计交互式应用事实上的标准【1】。
MVC模式的组成分解成模型、视图、控制器三个部分,
允许组成每个部分的各个组件间松散地耦合。这使得程序
开发更加灵活.并且可以减少重复性代码。实现代码重用。
视图把表示模型数据及逻辑关系和状态的信息以特定
形式展示给用户。它从模型获得显示信息,对于相同的信息
可以有多个不同的显示形式或视图。
的一部分,它为构建新一代网络分布式应用提供了强有力
的支持。与以前的Web开发模型相比.ASP.NET提供了许
多如简易性、安全性、可管理性等重要优点。而且与基于过
程的Web页面技术相比,面向对象技术在ASP.NET中得到
了完全实现:三层结构的开发技术在.NET中逐步得到应
用,并发挥了极大的优越性.但也有不足之处,由于Web页
面的特殊性.三层结构逻辑的划分并没有使代码在物理上
完全实现分离.反而使设计的系统结构复杂、用户难以理
解.应用上缺乏可复用性..NET技术结合MVC设计模式能
够很好地解决上述问题。
1MVC设计模式和三层结构
1.1 MVC设计模式
MVC设计模式是Model(模型)一View(视图)-Controller
收稿日期:2007—05—31
基金项目:国家自然基金项目(60673108)
控制器是处理用户与软件的交互操作的.其职责是控
制提供模型中任何变化的传播,确保用户界面于模型间的
对应联系;它接受用户的输入,将输入反馈给模型,进而实
现对模型的计算控制.是使模型和视图协调工作的部件。
维普资讯
第15卷 徐朝辉, ̄:MVC设计模式在.NET三层结构开发中的研究和实现 .71.
——————
万i2= 调用 一………一 件
图1 MVC组件类型的关系和功能
模型保存由视图显示,由控制器控制的数据;它封装了
问题的核心数据、逻辑和功能的计算关系.它独立于具体的
界面表达和I/O操作。
模型、视图与控制器的分离.使得一个模型可以具有多
个显示视图。如果用户通过某个视图的控制器改变了模型
的数据.所有其它依赖于这些数据的视图都应反映到这些
变化。因此.无论何时发生了何种数据变化。控制器都会将
变化通知所有的视图.导致显示的更新。这实际上是一种模
型的变化一传播机制[21。模型、视图、控制器三者之间的关系
和各自的主要功能。如图1所示。
1.2三层结构
数据库应用系统的开发,经历了从早期的单机模式。到
后来较为流行的客户机,服务器模式.发展到今天较流行的
三层结构模式。所谓三层结构.即将整个处理分成表示层、
业务层、数据层。客户层提供应用程序的用户界面。负责与
用户交互。它根据用户的操作调用相应的业务逻辑。不能直
接访问后台数据库;业务逻辑部分是应用系统的关键。它负
责处理用户请求.进行具体的运算和决定程序的流程.并且
把处理的结果返回给表示层;服务器层仍然提供的是数据
支持.维护和更新应用程序的数据.这种结构的目的是缓和
客户机或数据库服务器上的代码膨胀.集中管理业务逻辑
更灵活的使用数据库.三层架构的提出.使得系统层次划发
清晰,在有一定规模的项目实施中,易于设计、维护、功能延
伸和组件的重用.有利于开发人员有效的组织和分工协作。
尽管三层结构较以往的二层结构有了很大的改进.但
是仍然存在一些不足:复杂性、应用缺乏可复用性和可移植
性等等。
现在流行的典型三层结构是B/S系统.即浏览器/web
服务器,数据库服务器。在开发B/S系统时。所有的web页
面既含有表示层的HTML/XML代码、又含有业务逻辑层的
逻辑控制代码。逻辑上的分离与物理上的结合增加了系统
结构的复杂性。而且不加选择地随意运用,会导致WEB页
面内嵌人大量的脚本片段,不利于流程的控制.从根本上
讲。将导致角色定义不清和职责分配不明。给项目管理带来
不必要的麻烦。即使可以开发出的这样系统。但由于难以理
解而缺乏可复用性。MVC设计模式是采用两层结构设计,
而三层结构是对两层结构的延伸.所以可以将
MVC应用于三层结构的开发中.以发挥二者的优
势.因此本文提出了MVC设计模式在.NET三层
结构中的应用模型。
1.3 MVC设计模式的应用模型
.
NET提供了一个实现MVC设计模式的“天
然”环境。.NET采用“code—behind”代码来处理显
示页面的用户交互。即每个aspx文件都对应一个
“
code—behind”源代码文件。通过“code—behind”实
现了逻辑控制代码与脚本语言、HTML等代码的
分离。.NET应用系统按照三层WEB结构划分为
表示层(WEB)、业务层(BIZ)和数据层(DAO)。表示层由
EWB窗体组成。实现视图和控制器的功能;业务层包括业
务实体组件和业务逻辑组件;数据层包括数据对象、数据访
问组件等,由业务层和数据层共同实现模型的功能。通过映
射MVC模式三个部分到.NET体系结构中的三层结构.构
建了基于MVC模式在.NET框架下的系统应用模型(如图2
所示),以下以WEB系统中常见的用户信息查询模块为例,
探讨MVC设计模式在.NET应用中的实现机制。
Model(模型)
浏 业务实体组件数槲对缘
览  ̄ii 业务逻辑组件数摊 『u]组件
器
——
朋 表示 (WEB) 业务 (BIZ) 数 (DAO)
图2 MVC模式在.NET中的应用模型
2 MVC设计模式的实现
2.1视图的实现
在.NET开发环境中设计视图十分便捷,View由aspx
页面来实现。Visual Studio.NET在视图设计器的工具箱中提
供了数据、 b窗体、组件、HTML等各种控件,同时还提供
了用户控件。用户控件是一种直观的可重用的模型。扩展名
为.aSCX。它可以是最简单HTML控件、服务器控件或多个控
件嵌套构成的 b自定义控件[4t。通过以上各种控件,可以
像开发Windows界面一样以所见即所得的方式进行可视化
设计。本系统中视图与各模块中的aspx文件相对应,aspx
文件与系统中的各个用户界面相对应。
2.2控制器的实现
.
NET中的代码分离机制使View中的代码与Model及
Controller中的代码能够很容易分离。每个aspx文件对应了
一
个后端代码.cs(本文以C#语言为例)。通过该后端代码
来实现Controller的功能。每个aspx页面都有一种机制,将
页面中的控件所要调用的方法在一个与其分离的类中实
现。这些aspx和瑚c】【.文件后端代码继承了System.UI.Web.
Page的类执行控制器功能.它包括了各种初始化和控制函
维普资讯
・
72・ 北京电子科技学院学报 2007征
数。当加载aspx页面时将调用Page—Load事件,当aspx页 DataBase类中与数据库连接和交互的公共操作方法的实现
面从内存中被卸载时将调用Page—Unload事件。如果某个
控件触发页面以使其被重新加载则将调用ControlEvent事
件。在本系统中,Controller负责接收、截获并处理用户请求
和各种事件。通过调用Model中的业务逻辑组件来获取各
代码如下:
Public class DataBase
{
//对数据库操作的基本类
Public DataSet RunSql(string SQL)//执行SQL语句,返回DataSet
对象
{
种数据对象,根据当前状态和业务操作的结果决定向客户
呈现的视图,控制aspx页面的显示。以常用的用户数据查
询模块中视图UserInfo.aspx对应的Controller为例,该
sqlconnection=new sqlcohnection(connstr);//建立SQL连
接
Controller实现根据用户输入的个人ID号查询出的个人基
本信息,具体实现如下文:
Public class Userlnfo:System.Web.UI.Page
{
Protected System.Web.UI.WebControls.DataGrid dgUserlnfo;
//声明DataGrid控件
Protected Sy ̄em.Web.UI.WebControls.Button btnSubmit;|商
明Button控件,提交按钮
Protected Sy ̄em.Web.UI.WebControls.TextBox tbID;|庐呗
TextBox控件.用户填写ID数据
UserlnfoBiz userlnfo=new UserhffoBiz 0;//实例化对应业务逻
辑类
Private void Page
_
Load(object sender,System,EventArgs e)
{
I !IsPostBack1//是否为响应客户端回发而加载该页
{
BindUserlnfo0;
】
Void BindUserlnfo0//公共绑定数据方法
{
Stirng id=tbID.Text;//用户输入在textbox中的数据
DataSet ds=userlnfo.GetSingleUserlnfo(id);//调用业务逻辑
类中的方法,由GetSingleUserlnfo0调用DAO内方法获取某一用户
信息的数据集
dgUserlnfo.DataSource=ds.Tables[0].DefaultView;//获取数
据源
dgUsed ̄o.DataBindO;//绑定控件到指定数据源
】
void btnSubmit
—
Click(Object sender,EventArgs e)//提交按钮
事件
{
BindUserlnfo0;
】
2.3模型的实现
Model用来管理应用程序域的行为和数据。在本系统
中将业务逻辑、与数据库连接和交互的公共操作封装在单
独的类中,用专门的类来处理业务逻辑和数据逻辑,从而提
高了代码的重用性。具体实现方式为:在公用的基本类库
中,定义DataBase类作为公共数据库操作的基本类。在
SqlDataAdapter da=new SqlDataAdapter(SQL.Conn);// ̄0建
SqlDataAdapterg ̄象并实现连接打开和关闭
DataSet ds=new DataSet0;// ̄r]建DataSet对象
da.Fill(ds);//填充数据到DataSet中
da.Dispose0;//释放SqlConnection对象
return ds;//返回DataSet对象
】
】
应用程序在数据访问层(DAO)中通过引用公用基本类
中的方法RunSql O来获取数据对象,下面的数据层返回所
有用户的基本信息,具体方法如下:
Public class UserlnfoDAO:BaseObjecff/ ̄承所有数据对象的基类
BaseObject
{
Public DataSet GetUserlnfo 0//从数据库中获取用户信息
{
Stirng sql=”select from Userlnfo”://SQL查询语句
retunr db.RunSql(sq1);//调用数据库操作的基本类中RunSql 0
方法
】
】
Controller不直接对Model中的数据进行操作,而是通
过业务逻辑获取数据层(DAO)中的数据对象。Biz层由类(.
es)文件组成,其中业务逻辑组件封装了具体的处理逻辑。
该业务逻辑先取得数据层中的所有用户信息,然后根据一
个用户ID过滤其对应的用户信息。
Public class UserlnfoBiz
{
UserlnfoDAO userlnfo=new UserlnfoDAO0;//实例化对应数据
逻辑类
Public DataSet GetSingleUserlnfo(string ID1//得到包含用户信息
的一个DataSet
{
DataSet ds=userlnfo.GetUserlnfo 0; //调用DAO层
UserlnfoDAO类中的GetUserlnfo()3Y法
DataView dr=new DataView0;//创建DataView对象
dv.Table=ds.Tables[0];//ds表数据复制到dv中
dv.RowFiher=”userID=”+ID;//过滤符合ID用户的纪录.
DataSet dsl=(DataSet)dv;//强制转换为DataSet对象
return(ds1)
)
维普资讯
第15卷
)
徐朝辉,樊银亭:MVC设计模式在.NET三层结构开发中的研究和实现 .73.
比重比较大.不如直接访问方便:另一方面,代码的分离增
最后.Controller中的事件调用Model中的业务逻辑方
加了代码的维护成本,如果有涉及j者的变化时,在不同的
文件中修改显然比在同一个文件修改花费的代价大[61。因
此.在设计系统前权衡这样的代价是必不可少的,一般而
法,并且把响应提交到对应的视图组件以产生响应,完成对
客户端表单数据的描述。
3 MVC设计模式在.NET中的使用特点及不足之处
通过上述实现过程进行分析 在_NET中用MVc模式
开发的应用程序具有如下特点:
(1)减少页面依赖性,提升代码复用。通过页面中的代码
分离,可降低系统设计的复杂性,减少页面中的重复代码,
言,小型应用系统和需求比较明确的系统,这样的代价可以
忽略不计。
4结束语
本文针对开发.NET三层结构应用系统提出了MVC设
计模式在,NET平台上的应用模型,讨论了该模型中MVC
模块划分和WEB三层结构的划分之间的关系.并给出了每
一
如GetUserInfo和GetSingleUserInfo可被其它页面或类使
用。排除在多个视图中复制该实现代码。
f2)系统结构清晰,增加系统的可扩展性。MVC模式实
现的应用程序具有极其良好的结构和可扩展性,它可以轻
松实现以下功能。实现一个模型的多个视图;采用多个控制
器:当模型改变时,所有视图将自动刷新;所有的控制器将
相互独立工作嗍
f3)便于优化系统,提高系统性能。由于每次向数据库请
模块的具体实现。利用该应用模型设计的系统具有结构
稳定、易于复用、易于维护、易于伸缩等多种优点。由此可见
应用MVC设计模式开发.NET应用系统具有十分现实的意
义
参考文献:
【1】杨寅华.两类Web服务器数据接口的比较及基于MVC下的实
求,都要从数据库装载数据.通过公共的数据访问类和
ASP.NET的内部机制可以把数据存放在高速缓存中,从而
优化整个应用系统的性能.没有代码的分离这是不可能实
现的。
现[J].计算机应用与软件,2006,(2):69—71.
【2】孙奥,黄燕,吴平.MVC模式在.NET框架中的应用与实现【JJ_科技
广场,2006,(1):69—71.
[3]黎永良,崔杜武.MVC设计模式的改进与应用[J Jl计算机工程,
2005,(9):96-98.
(4)系统模型独立,提高系统的可测性。模型独立于视
图,既可以在.NET环境之外用第三方工具测试模型,也可
以通过编写测试脚本实现自动化测试,从而大大提高测试
的有效性和效率。
【4】李颖,乇丽芳,等.截取过滤器模式对MVC体系结构的优化[JJ.
微电子学与计算机,2005,(1):85—87.
【5 J易可可.陈志刚.基于MVC模式的Web OA系统设计与研究『J Jl
计算机工程与应用,2005,(4):112—115.
[6]邹鹏,尚维等.基于MVC模式的客户关系管理系统设计[JJ_计算
机应用研究,2005,(2):21—23.
(5)便于团队开发,提高开发效率。视图、控制器和模型
的分离,使得容易在开发人员中分工任务,提高专业化开发
技能和加快开发进度;
与任何事务一样,在.NET中使用MVC模式也有一些
作者简介:
不足之处,一方面,控制器不直接访问数据层,增加了代码
的复杂性,对于一些简单的业务逻辑附加的额外代码所占
徐朝辉(1970一),男,工学硕士,计算机应用技术专业高级工程师。
研究方向:软件工程、计算机网络、数据挖掘。
(_k+Lg 69页)
[19】陈燕敏,王晓龙,刘远超,等.一种基于文章主题和内容的自动
摘要方法.维普咨询1002—8331一(2004)33—001 1-04.
作者简介:
邱鹃(1983一),燕山大学信息工程学院通信与信息系统硕士研究
生。主要研究方向:文本挖掘,数据挖掘。
版权声明:本文标题:MVC设计模式在.NET三层结构开发中的研究和实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1711607230a602058.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论