认识MVC

MVC [模型-视图-控制器]

MVC是什么?ScottGu

MVC是个将一个应用的实现分成三个组件角色的框架技术:模型,视图和控制器。

  • 在基于MVC的应用里,Model(模型)是负责保持状态的应用组件。这个状态通常都持久于数据库之中(譬如,我们也许会有一个Product(产品)类用来代表SQL中的Products数据表中的订单数据)。
  • 在基于MVC的应用里,View(视图)是负责显示用户界面的组件。这个UI通常是使用模型数据来创建的(譬如,我们也许会生成一个Product"编辑"视图,根据当前Product对象的状态,显示文本框,下拉框和复选框等)。
  • 在基于MVC的应用里,Controller(控制器)是处理用户交互,操作模型和最终选择用哪个视图来显示UI的组件。在MVC应用中,视图只是用来显示信息而已,是控制器来处理和回应用户的输入和交互的。

使用MVC方法的一个好处是,它有助于促进应用中模型,视图,控制器间的关注的清晰分离。保持关注的清晰分离使得对应用的测试极其容易,因为不同应用组件间的契约的定义和表达是更明确的。

MVC模式也有利于促进红/绿式测试驱动的开发(TDD),通过它,你可以在你实际编写应用代码本身之前首先实现自动化的单元测试,这些单元测试定义和核实了新代码的需求。

 

为什么要MVC (Rick Strahl)

Web页面太复杂,逻辑代码和视图Html写在一起,很难维护。需要MVC解耦,

ASP.Net Web Form框架有着非常强大的扩展能力,我们可以肯定了它对自定义控件这一产业所做出的贡献,在这种强大的功能背后,却从不了解正正的运行机理,但是也有着不少的缺点。这既是一种幸运也是一个祸根。Web Forms让开发人员能够轻松地拖放控件,并且通过响应页面和控件的各种事件来快速开发Web应用。这一点很不错,但是首先这种高度的抽象使很多开发人员完全忽略了——甚至从没有了解过在这背后HTML是如何运作的。这往往会产生无法通过校验的HTML代码,或者是一些非常冗余,难以管理的HTML布局,这对于页面设计人员非常不友好。同时,如果没有合理控制ViewState的话,你很容易得到一个包含大量ViewState的页面,它的尺寸远远超过所需的内容,最终使得页面打开异常缓慢。

Web Forms框架的缺点之一,就是微软在这个抽象背后构建了一个非常复杂的引擎,它给页面的执行过程带来了许多的负面效应。如果你曾经构建过包含大量组件的复杂页面,就会发现某些时候要协调好数据绑定,页面生成等事件的顺序,并且在页面的生命周期中选择恰当的时间来设置不同的控件是一件非常困难的事情。你是否曾经在Init、Load或者PreRender事件中加载过数据?你是否在PostBack事件中进行过赋值?Web Forms需要服务器端的一个独立的表单中进行操作,因此你可能无法轻易地将它分解成小的逻辑单元。在一些复杂情况下,事件处理程序会变得非常庞大,你很难对它们的工作进行重构,最终你会得到许多难以维护的代码,并且几乎无法进行测试。

测试,绝对是测试。对于专业人员来说,Web Forms难以测试是一个更大的问题。Web Forms几乎无法做到自动测试,一部分原因是由于我们很难模拟Context、Response和Session对象,至于其他的原因还有例如我们很难处理它的事件驱动模型等。

还有,比较重要的一点是多个视图能共享一个模型,我们可能会需要用越来越多的方式来访问现有的的应用程序。对此,其中一个解决之道是使用MVC,无论你的用户想要图形界面或是文字界面;用一个统一的模型就能处理它们。由于你已经将数据和业务规则从表示层分开,所以你可以最大化的重用你的代码了。

 

ASP.NET下的MVC

clip_image001

用户发出一个请求,URL地址指向请求位置,拦截http请求,在MVC中,通过Routing将请求带到要执行的Controller和具体的Action,转换成要执行的具体业务逻辑的操作。Controller会跟据用户提交的请求,去Model中取得相应的数据,或许还会去DB中更新数据到Model。然后将Model中的值绑定到View,并返回View到用户浏览器。

 

我的MVC

回想自己学了多年的ASP.Net,也做过几个项目,但每次都感觉不爽,回想起来却是对前台端一无所知,写代码时,一方面让自己不去用那些复杂的、不知内因的控件,一方面又不知该怎么做起,界面和操作的混乱让人头大。

看到MVC时,我觉得一种清晰,好像把眼前的青纱帐拿掉一番,顿见清澈。而且已经有不少好的开源项目可供学习。例如:Oxite,虽然很多人对这个项目有很多的异义,但那并不重要,重要的是,怎么去学习其中的精髓,当然传统的Web Form框架肯定还是要用的,偶也找了一个好的开源项目,DNN。有兴趣的朋友也可以看一下。接下来,我也会分享一些这个项目的个人经验。

 

参考资料

ASP.Net 官方视频

Jeff Zhao 的Webcast

Cnblog的文章

posted @ 2009-02-19 15:58  Binglingshui  阅读(521)  评论(1编辑  收藏  举报
小明明