【MVC架构】聊一聊MVC

前言

    MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。在日常的.net项目开发中,使用MVC是很常见的一件事情,来具体的了解一下MVC。

叙述

What

   MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

  • 控制器(Controller)- 负责转发请求,对请求进行处理。

     详细解释:控制器是处理用户交互,处理模型的组件,并最终选择一个视图来显示UI。控制器充当模型和视图组件之间的接口,以处理所有业务逻辑和传入请求,使用模型组件处理数据,并与视图交互以呈现最终输出。在MVC应用程序中,视图只显示信息; 控制器处理并响应用户输入和交互。例如,控制器处理查询字符串值,并将这些值传递给模型,而模型又可能使用这些值来查询数据库。
  • 视图(View) - 界面设计人员进行图形界面设计。

     详细解释:视图是显示应用程序用户界面(UI)的组件。通常,此UI是从模型数据创建的。一个例子是一个Products表格的编辑视图,该表格根据Product对象的当前状态显示文本框,下拉列表和复选框。
  • 模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。

     详细解释:模型组件对应于用户使用的所有与数据相关的逻辑。通常检索数据库中的模型状态并存储。这可以表示在View和Controller组件之间传输的数据,或者任何其他业务逻辑相关的数据。例如,Product对象可能会从数据库中检索信息,对其进行操作,然后将更新后的信息写回到SQL Server数据库的Products表中。

    在小型应用程序中,模型通常是概念上的分离,而不是物理上的分离。例如,如果应用程序只读取数据集并将其发送到视图,则应用程序没有物理模型图层和关联的类。在这种情况下,数据集将扮演模型对象的角色。

【MVC架构】聊一聊MVC

组件的互动

  将应用程序划分为三种组件,模型 - 视图 - 控制器(MVC)设计定义它们之间的相互作用。

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

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

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

【MVC架构】聊一聊MVC

ASP.NET具体如何使用

  在ASP.NET中,针对视图(View)和控制器(Controller)的模式没有被很好地定义。而模型(Model)则留给开发者去设计。

视图(View)
ASPX和ASCX文件被用来处理 View 的职责。在这个设计中 View 实际上是从 Controller 继承而来。这个和Smalltalk的实施有所不同,在Smalltalk中不同的类都有指针互相指向对方.
控制器(Controllers)
Controller 的职责被分区成两部分。事件(Event)的产生和传输是框架的一部分,更明确的说是Page和Control两个类。而事件的处理则在分离的代码中实现。
模型(Model)

  ASP.NET 不严格需要一个 Model。开发者可以自行选择创建一个 Model 类,但是很多人选择放弃这一步,直接把事件处理放Controller 里处理任何计算、数据保存等等。但用 Model 来包含商业逻辑和数据访问是可实现的。

  此外,在ASP.NET MVC中,一般情况下Model通常搭配LINQ to SQL类别(使用O/R Designer工具所制作而成的DBML档)或ADO.NET实体数据模型(Entity Data Model,使用ADO.NET Entity Framework制作出的EDMX档)来实现。

下图说明了ASP.NET MVC中用户请求的流程。

【MVC架构】聊一聊MVC

   如上图所示,当用户在浏览器中输入一个URL时,它会进入服务器并调用适当的控制器。然后,控制器使用适当的视图和模型并创建响应并将其发回给用户。

MVC工作原理

【MVC架构】聊一聊MVC

MVC流程图

【MVC架构】聊一聊MVC

流程步骤

步骤1 - 客户端浏览器向MVC应用程序发送请求。
步骤2-Global.ascx收到此请求,并使用RouteTable,RouteData,UrlRoutingModule和MvcRouteHandler对象基于传入请求的URL执行路由。
步骤3 - 此路由操作调用相应的控制器,并使用IControllerFactory对象和MvcHandler对象的Execute方法执行它。
步骤4 - Controller使用Model处理数据,并使用ControllerActionInvoker对象调用适当的方法

步骤5 - 处理后的模型然后传递给视图,该视图进而呈现最终的输出。

MVC和三层的区别

   MVC(模型Model-视图View-控制器Controller)是一种架构模式,可以用它来创建在域对象和UI表示层对象之间的区分。
(1)同样是架构级别的,相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。
(2)在三层架构中没有定义Controller的概念。这是最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。

【MVC架构】聊一聊MVC


小结 

    使用的MVC的目的:在于将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如Windows系统资源管理器文件夹内容的显示方式,下面两张图中左边为详细信息显示方式,右边为中等图标显示方式,文件的内容并没有改变,改变的是显示的方式。不管用户使用何种类型的显示方式,文件的内容并没有改变,达到M和V分离的目的