MVC简介

1. MVC模式

  MVC模式是一种软件架构模式。它把软件系统分为三个部分:模型(Model),视图(View)和控制器(Controller)。MVC模式最早由Trygve Reenskaug在1974年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能。   

  模型(Model) “数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变.

  视图(View) 视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。

  控制器(Controller) 控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

  在最初的JSP网页中,像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心地计划和不断的尝试。MVC从根本上强制性地将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它带给我们的好处是毋庸置疑的。

  首先,多个视图能共享一个模型。如今,同一个Web应用程序会提供多种用户界面,例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要求Web网站同时能提供Internet界面和WAP界面。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。

  其次,控制器是自包含(self-contained)指高独立内聚的对象,与模型和视图保持相对独立,所以可以方便的改变应用程序的数据层和业务规则。例如,把数据库从MySQL移植到Oracle,或者把RDBMS数据源改变成LDAP数据源,只需改变控制器即可。一旦正确地实现了控制器,不管数据来自数据库还是LDAP服务器,视图都会正确地显示它们。由于MVC模式的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的少互扰性的构件。

  此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不同的模型和视图去完成用户的需求,也可以构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型机型处理,然后选择适当的的视图将处理结果显示给用户。

【引用】:http://kb.cnblogs.com/page/100216/

2. MVC与Web Forms

1 Web Forms构建web相对容易,开发人员只需在一个可视化设计器中拖放控件,设置相关属性即可,通过编写代码来响应事件,使得对于程序的逻辑操作非常直观。但是,开发人员很难了解背后HTML是如何运行的,同时,如果没有合理控制ViewState的话,页面的尺寸将大大超过预期,使得页面打开相当缓慢,随着web应用的复杂化,不容易测试也是开发中面对的一个问题

2 MVC避免了Web Forms所带来的复杂性,没有数据回传,没有页面中保存视图状态,开发者可以完全掌握页面呈现的全过程,使用模型、视图及控制器将web划分为不同的组件,有利于开发与设计的分离,也提高了程序的可维护性和扩展性,特别是利于应用程序的测试,可以比较容易的实施测试驱动开发。

3两种开发技术并存。 MVC只是给开发者提供了开发web应用程序的一种选择,而不是替代传统的Web Forms,这两种技术应用于不同的场合具有不同的优缺点

Web Forms MVC

当一个浏览器向服务器请求一个aspx页面时的简体步骤如下:

服务器会首先创建前台页面aspx类的对象,当子类(aspx类)被创建时,父类(后台页面CS类)也会顺便被创建。

接着就会在前台页面类中调用ProcessRequest方法(PR方法不是在前台页面类中定义的,而是在Page类中定义的,

因为CS类继承与page类,而aspx类又继承与page类,所以PR方法相当于aspx类的爷爷类中定义的)。

在PR方法中调用BuildControlTree方法,把前台页面所有的html控件和runat=server的控件转成对应的控件对象并添加在前台页面

类得Controls集合中(这里当前页面即aspx页面类是根节点),而且runat=server的控件对象会保存在后台CS类中的一个对应类型的变量中。

在PR方法中调用后台页面CS类的Page_Load方法,这个方法中的代码是程序员自己写的。

 最后再PR方法中调用Render_Controls方法,来遍历控件树中每一个节点的Render_Controls方法,生成完整的html代码

 把完整的html代码返回给浏览器。

当用户从浏览器输入地址,发出页面请求,到返回结果,一般经过以下步骤:

1当用户输入地址,发出请求时,实际上就是向控制器发出相关命令

2控制器接收用户指令后,向模型请求获得相关数据

3模型将对应的数据返回给控制器

4控制器将有关数据发送到指定视图

5指定的视图呈现指定的数据

  • 它支持通过 HTTP 保留状态的事件模型,这有益于开发业务线 Web 应用程序。

     基于 Web 窗体的应用程序提供了在数百个服务器控件中受支持的许多事件。

  • 它使用页面控制器模式向单个页面添加功能。 

  • 它针对基于服务器的窗体使用视图状态,这使得管理状态信息更加轻松。

  • 它非常适合想要利用大量组件快速开发应用程序的 Web 开发人员和设计人员的小型团队。

  • 通常,对于应用程序开发而言,它比较简单,这是因为组件(Page 类、控件等)紧密集成并且通常需要比 MVC 模型更少的代码。

  • 通过将应用程序分为模型、视图和控制器,化繁为简的工作更加轻松。

  • 它不使用视图状态或基于服务器的窗体。 这使得 MVC 框架特别适合想要完全控制应用程序行为的开发人员。

  • 它使用一种通过单一控制器处理 Web 应用程序请求的前端控制器模式。 这使您可以设计一个支持丰富路由基础结构的应用程序

  • 它为测试驱动的开发 (TDD) 提供了更好的支持。

  • 它非常适合大型开发人员团队支持的 Web 应用程序,以及需要对应用程序行为进行极度控制的 Web 设计人员。

posted @ 2012-06-29 17:07  Johnny Yan  阅读(6890)  评论(0编辑  收藏  举报