asp.net mvc学习笔记之一:MVC模式学习

最近闲来无事,学习Asp.net的MVC framework。加上在博客园看文章好久了,经常心痒。
索性就把我的学习笔记贴上来,边学习,边写笔记,边往这儿贴。觉得太幼稚,您就跳过,觉得还可以您就帮顶,觉得有问题,您就拍砖。
如果有人读过之后,发现有什么技术问题,也请不吝赐教,我可以打补丁。
另外,我声明:文中所写都是我的个人理解,而不是在词典或者教科书中找到的定义。请不要以本文作为论文的论据。
下面进入正题:
一、MVC模式学习
提到设计模式,感觉好象是我身边的同事在04-05年左右忽然间集体爱上了设计模式,那时丁老师、辛老师、孙老师和已经回去日本的徐老师都对设计模式有较为深入的研究。我看设计模式,是从四人帮的那本小册子开始的,当然,到现在为止,我也没把那23个模式都看完。
说道MVC呢,其实系统的学习就是刚刚开始的,我的笔记也就从MVC模式开始吧。
从维基百科上找MVC这个关键字,得到的结果是:http://zh.wikipedia.org/zh-cn/Mvc,第一句话就是:
MVC即Model-View-Controller,是软件工程中的一种软件架构模式。它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller)。
乍一看,好像挺简单,实际上看完第二段解释,心里面就有数了。我本人对微软的产品了解,是从vb6开始的,那时是高中,就是玩玩,而真正的开始做技术,是从vc6开始的,记得那时最让我费解的就是MFC中的document/view架构了。刚刚写程序那会儿(记得是大二),好像是把什么都写到OnPaint和OnDraw里面去了,不要笑话我,那时编程水平太差,就那样,不过至少我写出了点垃圾代码,比那些啥都不写的小童鞋么强些。而且说实话,我觉得像我那么写程序的初学者一定不少。
后来,为了赚些零花钱,我开始学做网站。因为有大一那网页设计奖时突击学习asp的基础,所以,开始时候那些网站都是用asp写的,当然后来就是找的模板文章系统改的了。到现在,我还记得那时为了一些自己写的乱七八糟的代码,苦苦熬夜维护时的痛苦心情,还有从那以后,对完全OO,以及控制和视图分离的渴望。
终于,到毕业前,我见识到了J2EE的强大,那时觉得,jsp以及servlet的分离简直是一场革命。
为什么这么说?因为学过软件工程的都知道,软件模块间的耦合性强弱,直接决定了:1)软件是否可调试、测试和维护,2)项目是否可使用非“瀑布模型”进行过程定义和管理,3)软件是否可扩展,4)......鉴于以上原因,一种开发工具是否支持诸如MVC的框架,已经越来越被开发人员所看重。
MVC,分为3个部分,在维基百科上3个部分的关系如图1所示

图1 MVC模式的结构
在图1中,控制器负责接收和分发用户的服务请求,视图是软件系统给用户呈现的服务结果和呈现式样,模型中包含完成某功能的业务逻辑。
事实上,任何一个软件系统,无论是传统的客户端界面应用也好,或者是web应用,甚至web service。用户与软件系统的交互总是从控制器开始的,因为,无论如何,软件系统总要为用户提供一个初始的界面(或者仅仅是方法),哪怕是默认的也好。在控制器第一次接收到用户的服务请求(这里的请求不仅是http request)后,需要根据预定义的规则,返回一个视图。而后,用户在视图上产生的操作会继续发送给控制器,而后,控制器将状态改变的请求发送给模型,再由模型通知视图,模型状态发生变化了,最后,视图从模型上获得更新。
这样一个过程可以细化成图2所示的关系

看过了以上的内容之后,我想谈谈有关模块间耦合度的问题:
在MVC三部分中,会产生较高耦合度的部分是模型与视图,从细节上来说,一个视图一般来说需要清晰地知道对应模型的细节,否则是无法实现的。这就导致了如下的两种情况:1、当模型发生变化时,视图一般要发生对应的变化,而且可能影响到视图的结构。2、当视图中需要的数据需求发生变化时,模型必须发生变化。视图和模型的可重用性有多高,主要取决于其耦合程度。相对来说,耦合度较低的部分是视图和控制器之间的联系。
简单总结下MVC的要点:
起源:smalltalk
使用目的:最初是为了在GUI中使程序对象模块化,现在一般用在大型软件架构设计上,为软件模块解耦。
优点:耦合度低,对于大型软件系统来说,好的MVC设计可以有效的降低模块间的耦合关系。
缺点:应用较为复杂,较传统的软件设计方法来说,需要更多的设计时间和更大的难度,不适宜在小型系统中应用。

下一篇想自己写个ASP.NET MVC的案例。
p.s.这篇小文拖了3天,总是刚开始写就被打断,思路不是很清晰。以后有机会再重写吧。
另外附上一篇Martin Fowler的文献,觉得很不错。http://www.martinfowler.com/eaaDev/uiArchs.html

posted @ 2009-09-17 12:22  杜宇David  阅读(301)  评论(0)    收藏  举报