《MVC设计模式在_NET三层结构开发中的研究和实现.pdf》由会员分享,可在线阅读,更多相关《MVC设计模式在_NET三层结构开发中的研究和实现.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1 5卷 第2期北京电子科技学院学报2 0 0 7年6月V o l.1 5N o.2J o u r n a lo fB e i j i n gE l e c t r o n i cS c i e n c ea n dT e c h n o l o g yI n s t i t u t eJ u n.2 0 0 7收稿日期:2 0 0 7-0 5-3 1*基金项目:国家自然基金项目(6 0 6 7 3 1 0 8)MV C 设计模式在.N E T三层结构开发中的研究和实现徐朝辉,樊银亭(河南工业大学信息科学与工程学院,河南省 郑州4 5 0 0 0 1)摘要:为了克服当前应用.NE T开发技术
2、的种种弊端,本文首先介绍了MV C设计模式的概念及WE B三层结构技术,接着提出了MV C设计模式在.NE T三层结构开发中的应用模型并讨论了该应用模型在.NE T环境下的实现过程,最后对MV C在.NE T下的使用特点及不足之处进行了分析。关键词:MV C;设计模式;三层结构;A S P.NE T中图分类号:T P 3 9 3文献标识码:A文章编号:1 6 7 2-4 6 4 X(2 0 0 7)0 2-0 0 7 0-0 4R e s e a r c ha n dI mp l e me n t a t i o no f MV CD e s i g nP a t t e r ni nD e
3、v e l o p me n t o f.N E Tw i t hT h r e e T i e r S t r u c t u r eX UZ h a o-h u i,F A NY i n-t i n g(S c h o o l o f I n f o r ma t i o nS c i e n c ea n dE n g i n e e r i n g,H e n a nU n i v e r s i t y o f T e c h n o l o g y,Z h e n g z h o u4 5 0 0 0 1,C h i n a)A b s t r a c t:T oo v e r c
4、 o m et h ed i s a d v a n t a g e s o f c u r r e n t a p p l i c a t i o nd e v e l o p m e n t t e c h n o l o g yo f.N E T.T h i s p a p e rf i r s t l yi n t r o d u c e st h ec o n c e p t o f t h eM V Cd e s i g np a t t e r na n dt h r e e-t i es t r u c t u r et e c h n o l o g y,s e c o n
5、d l y,a na p p l i c a t i o nm o d e l o f M V Ci n.n e t w i t ht h r e et i es t r u c t u r ei sp u t f o r w a r da n dr e a l i z i n go f t h em o d e l i n.N E Te n v i r o n m e n t a r e d i s c u s s e d;f i n a l l y,t h e c h a r a c t e r i s t i c s a n dd i s a d v a n t a g e s o f
6、t h e a p p l i c a t i o na b o u t M V Ci n.N E Ta r e a n a l y z e d.K e y w o r d s:M V C;d e s i g np a t t e r n;t h r e e t i e r s t r u c t u r e;A S P.N E T0引言A S P.N E T是微软最新推出的新型体系结构.N E T框架的一部分,它为构建新一代网络分布式应用提供了强有力的支持。与以前的We b开发模型相比,A S P.N E T提供了许多如简易性、安全性、可管理性等重要优点。而且与基于过程的We b页面技术相比
7、,面向对象技术在A S P.N E T中得到了完全实现;三层结构的开发技术在.N E T中逐步得到应用,并发挥了极大的优越性,但也有不足之处,由于We b页面的特殊性,三层结构逻辑的划分并没有使代码在物理上完全实现分离,反而使设计的系统结构复杂、用户难以理解,应用上缺乏可复用性,.N E T技术结合M V C设计模式能够很好地解决上述问题。1 MV C设计模式和三层结构1.1MV C设计模式M V C设计模式是M o d e l(模型)-V i e w(视图)-C o n t r o l l e r(控制器)的简称。最初是在2 0世纪7 0年代由施乐(X e r o x)公司的P a l o
8、A l t o研究中心提出的。M V C模式最先被用来在第一代基于视窗的计算机上管理G U I和用户交互。近些年广泛应用在J 2 E E平台上,近两年来,随着A S P.N E T技术在大型WE B应用上的地位得到巩固,M V C这个最广为人知、最著名的设计模式在.N E T平台上也逐渐开始得到应用,并已成为当今设计交互式应用事实上的标准 1。M V C模式的组成分解成模型、视图、控制器三个部分,允许组成每个部分的各个组件间松散地耦合。这使得程序开发更加灵活,并且可以减少重复性代码,实现代码重用。视图把表示模型数据及逻辑关系和状态的信息以特定形式展示给用户。它从模型获得显示信息,对于相同的信息
9、可以有多个不同的显示形式或视图。控制器是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。徐朝辉,樊银亭:M V C设计模式在.N E T三层结构开发中的研究和实现第1 5卷模型保存由视图显示,由控制器控制的数据;它封装了问题的核心数据、逻辑和功能的计算关系,它独立于具体的界面表达和I/O操作。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论
10、何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制 2。模型、视图、控制器三者之间的关系和各自的主要功能,如图1所示。1.2三层结构数据库应用系统的开发,经历了从早期的单机模式,到后来较为流行的客户机/服务器模式,发展到今天较流行的三层结构模式。所谓三层结构,即将整个处理分成表示层、业务层、数据层。客户层提供应用程序的用户界面,负责与用户交互,它根据用户的操作调用相应的业务逻辑,不能直接访问后台数据库;业务逻辑部分是应用系统的关键,它负责处理用户请求,进行具体的运算和决定程序的流程,并且把处理的结果返回给表示层;服务器层仍然提供的是数据支
11、持,维护和更新应用程序的数据.这种结构的目的是缓和客户机或数据库服务器上的代码膨胀,集中管理业务逻辑更灵活的使用数据库.三层架构的提出,使得系统层次划发清晰,在有一定规模的项目实施中,易于设计、维护、功能延伸和组件的重用,有利于开发人员有效的组织和分工协作。尽管三层结构较以往的二层结构有了很大的改进,但是仍然存在一些不足:复杂性、应用缺乏可复用性和可移植性等等。现在流行的典型三层结构是B/S系统,即浏览器/w e b服务器/数据库服务器,在开发B/S系统时,所有的We b页面既含有表示层的H T M L/X M L代码、又含有业务逻辑层的逻辑控制代码,逻辑上的分离与物理上的结合增加了系统结构的
12、复杂性。而且不加选择地随意运用,会导致WE B页面内嵌入大量的脚本片段,不利于流程的控制,从根本上讲,将导致角色定义不清和职责分配不明,给项目管理带来不必要的麻烦。即使可以开发出的这样系统,但由于难以理解而缺乏可复用性。M V C设计模式是采用两层结构设计,而三层结构是对两层结构的延伸,所以可以将M V C应用于三层结构的开发中,以发挥二者的优势,因此本文提出了M V C设计模式在.N E T三层结构中的应用模型。1.3MV C设计模式的应用模型.N E T提供了一个实现M V C设计模式的“天然”环境。.N E T采用“c o d e-b e h i n d”代码来处理显示页面的用户交互。即
13、每个a s p x文件都对应一个“c o d e-b e h i n d”源代码文件。通过“c o d e-b e h i n d”实现了逻辑控制代码与脚本语言、H T M L等代码的分离。.N E T应用系统按照三层WE B结构划分为表示层(WE B)、业务层(B I Z)和数据层(D A O)。表示层由WE B窗体组成,实现视图和控制器的功能;业务层包括业务实体组件和业务逻辑组件;数据层包括数据对象、数据访问组件等,由业务层和数据层共同实现模型的功能。通过映射M V C模式三个部分到.N E T体系结构中的三层结构,构建了基于M V C模式在.N E T框架下的系统应用模型(如图2所示),
14、以下以WE B系统中常见的用户信息查询模块为例,探讨M V C设计模式在.N E T应用中的实现机制。2 MV C设计模式的实现2.1视图的实现在.N E T开发环境中设计视图十分便捷,V i e w由a s p x页面来实现。V i s u a l S t u d i o.N E T在视图设计器的工具箱中提供了数据、We b窗体、组件、H T M L等各种控件,同时还提供了用户控件。用户控件是一种直观的可重用的模型,扩展名为.a s c x。它可以是最简单H T M L控件、服务器控件或多个控件嵌套构成的We b自定义控件 4。通过以上各种控件,可以像开发Wi n d o w s界面一样以所
15、见即所得的方式进行可视化设计。本系统中视图与各模块中的a s p x文件相对应,a s p x文件与系统中的各个用户界面相对应。2.2控制器的实现.N E T中的代码分离机制使V i e w中的代码与M o d e l及C o n t r o l l e r中的代码能够很容易分离。每个a s p x文件对应了一个后端代码.c s(本文以C#语言为例),通过该后端代码来实现C o n t r o l l e r的功能。每个a s p x页面都有一种机制,将页面中的控件所要调用的方法在一个与其分离的类中实现。这些a s p x和.a s c x.文件后端代码继承了S y s t e m.U I.W
16、e b.P a g e的类执行控制器功能,它包括了各种初始化和控制函图1MV C组件类型的关系和功能图2MV C模式在.NE T中的应用模型7 1北京电子科技学院学报2 0 0 7年数。当加载a s p x页面时将调用P a g e _ L o a d事件,当a s p x页面从内存中被卸载时将调用P a g e _ U n l o a d事件。如果某个控件触发页面以使其被重新加载则将调用C o n t r o l E v e n t事件。在本系统中,C o n t r o l l e r负责接收、截获并处理用户请求和各种事件。通过调用M o d e l中的业务逻辑组件来获取各种数据对象,根据
17、当前状态和业务操作的结果决定向客户呈现的视图,控制a s p x页面的显示。以常用的用户数据查询 模 块 中 视 图U s e r I n f o.a s p x对 应 的C o n t r o l l e r为 例,该C o n t r o l l e r实现根据用户输入的个人I D号查询出的个人基本信息,具体实现如下文:P u b l i c c l a s s U s e r I n f o:S y s t e m.We b.U I.P a g eP r o t e c t e dS y s t e m.We b.U I.We b C o n t r o l s.D a t a G r
18、i dd g U s e r I n f o;/声明D a t a G r i d控件P r o t e c t e dS y s t e m.We b.U I.We b C o n t r o l s.B u t t o nb t n S u b m i t;/声明B u t t o n控件,提交按钮P r o t e c t e dS y s t e m.We b.U I.We b C o n t r o l s.T e x t B o xt b I D;/声 明T e x t B o x控件,用户填写I D数据U s e r I n f o B i z u s e r I n f o=n
19、 e wU s e r I n f o B i z();/实例化对应业务逻辑类P r i v a t e v o i dP a g e _ L o a d(o b j e c t s e n d e r,S y s t e m,E v e n t A r g s e)I f(!I s P o s t B a c k)/是否为响应客户端回发而加载该页B i n d U s e r I n f o();V o i dB i n d U s e r I n f o()/公共绑定数据方法S t r i n g i d=t b I D.T e x t;/用户输入在t e x t b o x中的数据D a
20、 t a S e t d s=u s e r I n f o.G e t S i n g l e U s e r I n f o(i d);/调用业务逻辑类中的方法,由G e t S i n g l e U s e r I n f o()调用D A O内方法获取某一用户信息的数据集d g U s e r I n f o.D a t a S o u r c e=d s.T a b l e s 0 .D e f a u l t V i e w;/获取数据源d g U s e r I n f o.D a t a B i n d();/绑定控件到指定数据源v o i db t n S u b m i
21、t _ C l i c k(O b j e c t s e n d e r,E v e n t A r g s e)/提交按钮事件B i n d U s e r I n f o();2.3模型的实现M o d e l用来管理应用程序域的行为和数据。在本系统中将业务逻辑、与数据库连接和交互的公共操作封装在单独的类中,用专门的类来处理业务逻辑和数据逻辑,从而提高了代码的重用性。具体实现方式为:在公用的基本类库中,定义D a t a B a s e类作为公共数据库操作的基本类。在D a t a B a s e类中与数据库连接和交互的公共操作方法的实现代码如下:P u b l i c c l a s
22、s D a t a B a s e/对数据库操作的基本类P u b l i cD a t a S e t R u n S q l(s t r i n gS Q L)/执行S Q L语句,返回D a t a S e t对象S q l C o n n e c t i o n=n e wS q l C o n n e c t i o n(C o n n S t r);/建立S Q L连接S q l D a t a A d a p t e rd a=n e wS q l D a t a A d a p t e r(S Q L,C o n n);/创 建S q l D a t a A d a p t e
23、 r对象并实现连接打开和关闭D a t a S e t d s=n e wD a t a S e t();/创建D a t a S e t对象d a.F i l l(d s);/填充数据到D a t a S e t中d a.D i s p o s e();/释放S q l C o n n e c t i o n对象r e t u r nd s;/返回D a t a S e t对象应用程序在数据访问层(D A O)中通过引用公用基本类中的方法R u n S q l()来获取数据对象,下面的数据层返回所有用户的基本信息,具体方法如下:P u b l i cc l a s sU s e r I n
24、f o D A O:B a s e O b j e c t/继 承 所 有 数 据 对 象 的 基 类B a s e O b j e c tP u b l i c D a t a S e t G e t U s e r I n f o()/从数据库中获取用户信息S t r i n g s q l=”s e l e c t*f r o m U s e r I n f o”;/S Q L查询语句r e t u r nd b.R u n S q l(s q l);/调用数据库操作的基本类中R u n S q l()方法C o n t r o l l e r不直接对M o d e l中的数据进行操作,
25、而是通过业务逻辑获取数据层(D A O)中的数据对象。B i z层由类(.c s)文件组成,其中业务逻辑组件封装了具体的处理逻辑。该业务逻辑先取得数据层中的所有用户信息,然后根据一个用户I D过滤其对应的用户信息。P u b l i c c l a s s U s e r I n f o B i zU s e r I n f o D A Ou s e r I n f o=n e wU s e r I n f o D A O();/实例化对应数据逻辑类P u b l i c D a t a S e t G e t S i n g l e U s e r I n f o(s t r i n g I
26、 D)/得到包含用户信息的一个D a t a S e tD a t a S e td s=u s e r I n f o.G e t U s e r I n f o();/调 用D A O层U s e r I n f o D A O类中的G e t U s e r I n f o()方法D a t a V i e wd v=n e wD a t a V i e w();/创建D a t a V i e w对象d v.T a b l e=d s.T a b l e s 0 ;/d s表数据复制到d v中d v.R o w F i l t e r=u s e r I D=+I D;/过滤符合I D
27、用户的纪录,D a t a S e t d s 1=(D a t a S e t)d v;/强制转换为D a t a S e t对象r e t u r n(d s 1)7 2徐朝辉,樊银亭:M V C设计模式在.N E T三层结构开发中的研究和实现第1 5卷最后,C o n t r o l l e r中的事件调用M o d e l中的业务逻辑方法,并且把响应提交到对应的视图组件以产生响应,完成对客户端表单数据的描述。3 MV C设计模式在.N E T中的使用特点及不足之处通过上述实现过程进行分析,在.N E T中用M V C模式开发的应用程序具有如下特点:(1)减少页面依赖性,提升代码复用。通
28、过页面中的代码分离,可降低系统设计的复杂性,减少页面中的重复代码,如G e t U s e r I n f o和G e t S i n g l e U s e r I n f o可 被 其它 页 面 或类 使用,排除在多个视图中复制该实现代码。(2)系统结构清晰,增加系统的可扩展性。M V C模式实现的应用程序具有极其良好的结构和可扩展性,它可以轻松实现以下功能,实现一个模型的多个视图;采用多个控制器;当模型改变时,所有视图将自动刷新;所有的控制器将相互独立工作 5。(3)便于优化系统,提高系统性能。由于每次向数据库请求,都要从数据库装载数据,通过公共的数据访问类和A S P.N E T的内部
29、机制可以把数据存放在高速缓存中,从而优化整个应用系统的性能,没有代码的分离这是不可能实现的。(4)系统模型独立,提高系统的可测性。模型独立于视图,既可以在.N E T环境之外用第三方工具测试模型,也可以通过编写测试脚本实现自动化测试,从而大大提高测试的有效性和效率。(5)便于团队开发,提高开发效率。视图、控制器和模型的分离,使得容易在开发人员中分工任务,提高专业化开发技能和加快开发进度;与任何事务一样,在.N E T中使用M V C模式也有一些不足之处,一方面,控制器不直接访问数据层,增加了代码的复杂性,对于一些简单的业务逻辑附加的额外代码所占比重比较大,不如直接访问方便;另一方面,代码的分离
30、增加了代码的维护成本,如果有涉及三者的变化时,在不同的文件中修改显然比在同一个文件修改花费的代价大 6。因此,在设计系统前权衡这样的代价是必不可少的,一般而言,小型应用系统和需求比较明确的系统,这样的代价可以忽略不计。4结束语本文针对开发.N E T三层结构应用系统提出了M V C设计模式在.N E T平台上的应用模型,讨论了该模型中M V C模块划分和WE B三层结构的划分之间的关系,并给出了每一模块的具体实现。利用该应用模型设计的系统具有结构稳定、易于复用、易于维护、易于伸缩等多种优点。由此可见应用M V C设计模式开发.N E T应用系统具有十分现实的意义。参考文献:1 杨寅华.两类We
31、 b服务器数据接口的比较及基于M V C下的实现 J .计算机应用与软件,2 0 0 6,(2):6 9-7 1.2 孙奥,黄燕,吴平.M V C模式在.N E T框架中的应用与实现 J .科技广场,2 0 0 6,(1):6 9-7 1.3 黎永良,崔杜武.M V C设计模式的改进与应用 J .计算机工程,2 0 0 5,(9):9 6-9 8.4 李颖,王丽芳,等.截取过滤器模式对M V C体系结构的优化 J .微电子学与计算机,2 0 0 5,(1):8 5-8 7.5 易可可,陈志刚.基于M V C模式的We bO A系统设计与研究 J .计算机工程与应用,2 0 0 5,(4):1 1 2-1 1 5.6 邹鹏,尚维等.基于M V C模式的客户关系管理系统设计 J .计算机应用研究,2 0 0 5,(2):2 1-2 3.作者简介:徐朝辉(1 9 7 0-),男,工学硕士,计算机应用技术专业高级工程师。研究方向:软件工程、计算机网络、数据挖掘。(上接第6 9页)1 9 陈燕敏,王晓龙,刘远超,等.一种基于文章主题和内容的自动摘要方法.维普咨询1 0 0 2-8 3 3 1-(2 0 0 4)3 3-0 0 1 1-0 4.作者简介:邱鹍(1 9 8 3-),燕山大学信息工程学院通信与信息系统硕士研究生。主要研究方向:文本挖掘,数据挖掘。7 3
限制150内