• ASP.NET MVC系列:ASP.NET MVC简介


    1. MVC设计模式简介

      MVC:Model-View-Controller,模型-视图-控制器,MVC是一种软件开发架构模式。

    1.1 MVC设计模式结构

      MVC设计模式三个基本组成部分之间关系如下图所示:

      模型(Model):负责对整个软件项目数据和业务规则的封装。模型对象是应用程序中实现数据领域(Data Domain)逻辑的部分,从数据库中获取模型状态,并且将模型状态保存至数据库。

      视图(View):负责给用户传递信息,并收集用户提交信息。

      控制器(Controller):负责控制视图的展示逻辑。

    1.2 MVC设计模式优点

      1>. 支持多个视图(View)对应一个模型(Model)。

      2>. 模型返回的数据不带任何显示格式,可直接应用于接口。

      3>. 应用被分离为三层,可以尽量小的改动满足应用的调整。一个应用的业务流程或者业务规则的改变只需改动MVC的模型层。

    1.3 MVC设计模式缺点

      1>. 视图(View)与控制器(Controller)之间连接过于紧密

      视图与控制器是相互分离,却是联系紧密的部件,不能独立重用。

      2>. 视图(View)对模型(Model)数据访问低效

      依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。

    2. ASP.NET MVC简介

      ASP.NET MVC的官方网站为:http://www.asp.net/mvc

      ASP.NET MVC框架是一个轻量的、高度可测试的表现层框架。

    2.1 ASP.NET MVC框架特点

      ◊ 将应用程序分为Model、View和Controller,简化管理复杂性。

      ◊ 不适用ViewState或基于Server的Form。

      ◊ 使用Front Controller模式来处理对Web应用程序的请求,可以设计出支持丰富路由结构的程序。

      ◊ 更好支持测试驱动开发(Test Drive Development,TDD)

      ◊ 使用Page Controller模式为单个页面添加功能

    2.2 ASP.NET MVC框架特点

      ◊ 应用程序任务分离(输入逻辑、业务逻辑和用户界面逻辑),增强可测试性,默认的测试驱动开发。MVC框架中的所有核心契约都是基于接口的,可以使用mock对象进行测试,mock对象是模拟的对象,模拟应用程序中实际对象的行为。对应用程序进行单元测试,而不需要在ASP.NET进程中运行Controller。

      ◊ ASP.NET MVC框架是一个可扩展和可插入的框架。ASP.NET MVC框架的组件设计为可以很容易地替换或者定制。可以嵌入自定义的视图引擎、URL路由策略、动作方法参数序列化,以及其他组件。ASP.NET MVC框架也支持使用依赖注入(Dependency Injection,DI)和控制倒置(Inversion of Control,IoC)容器模型。DI允许将对象注入到类中,而不是基于类来创建对象本身。IoC制定了如果一个对象需要另一个对象,第一个对象应该由外部源,例如配置文件,获得第二个对象。这使得测试更加容易。

      ◊ 强大的UrlRouting,允许创建拥有易于理解和便于搜索的URL的应用程序。URL不需要包含文件名扩展,有利于搜索引擎优化(SEO)和表现状态传输(representational state transfer)的URL命名模式。

      ◊ 支持现有的ASP.NET功能。ASP.NET MVC允许你使用例如表单验证和Windows验证、URL授权、成员资格和角色、输出和数据缓存、会话、配置系统和Provider架构等ASP.NET的功能。

    2.3 ASP.NET MVC应用程序目录结构

      ASP.NET MVC应用程序目录结构主要文件夹:

      

      App_Data:数据物理存储区。

      Content:存储项目内容文件,非动态非JavaScript文件,如css、图片等。

      Controller:存储控制器。ASP.NET MVC框架要求所有控制器的名称均已Controller结尾。

      Models:存储MVC Web应用程序模型类。此文件夹通常包括定义对象以及定义与数据交互所用的逻辑代码。通常,实际模型对象将位于独立的类库中。

      Scripts:存储应用程序用到的脚本文件。

      Views:存储视图。在Views文件夹中,每个控制器都具有一个文件夹,且该文件夹以控制器名称前缀命名。

    2.4 ASP.NET MVC核心命名空间

      ASP.NET MVC核心相关的命名空间:

      

      System.Web.Routing:URL路由在该命名空间下提供了使用URL路由功能类,它可以将一个URL路由映射对应到Controller上,而不是映射到一个物理文件。

      System.Web.Extensions:ASP.NET Ajax的命名空间,在MVC中使用Ajax功能时需要引用。

      System.Web.Mvc:ASP.NET MVC最主要的命名空间。该命名空间包含一些类和接口,它们支持用于创建Web应用程序的ASP.NET MVC框架。该命名空间包含表示控制器、控制器工厂、操作结果、视图、部分视图以及模型编译等类。

      System.Web.Abstractions:该命名空间包含一些相关的基类,例如HttpContextBase和HttpRequestBase等。

      System.Web.DynamicData:该命名空间包含为ASP.NET动态数据提供核心功能的类。另外,它还提供允许自定义动态数据行为的扩展功能。

    3. ASP.NET MVC应用程序执行过程

    3.1 ASP.NET MVC应用程序执行过程

      1>. 基于ASP.NET MVC的Web应用程序发出的请求;

      2>. 通过UrlRoutingModule对象(Http模块)对请求进行解析,并且执行路由选择。UrlRoutingModule对象选择与当前请求所匹配的第一个路由对象。(路由对象是实现RouteBase的类,典型的是Route类的实例)。如果没有路由匹配,UrlRoutingModule对象什么也不做,并且让请求回退到IIS请求处理。

      3>.从所选择的Route对象中,UrlRoutingModule对象获取与Route对象相关的IRouteHandler对象。在ASP.NET MVC应用程序中,这是一个MvcRouteHandler的实例。IRouteHandler实例创建一个IHttpHandler对象,并向它传递IHttpContext对象。默认情况下,MVC的IHttpHandler实例是一个MvcHandler对象。

      4>.MvcHandler对象选择Controller,该Controller最终处理请求。

    3.2 ASP.NET MVC应用程序执行阶段

    执行阶段细节描述
    收到应用程序的第一个请求 在Global.asax文件中,Route对象添加到RouteTable对象中。
    执行路由 UrlRoutingModule模块使用RouteTable集合中的第一个匹配的Route对象来创建RouteData对象,该对象然后被用来创建RequestContext(IHttpContext)对象。
    创建MVC请求处理器 MvcRouteHandler对象创建一个MvcHandler类的实例,并且将RequestContext实例传递给它。
    创建Controller MvcHandler对象使用RequestContext实例来识别出IControllerFactory对象(默认是DefaultControllerFactory类的实例),来创建Controller实例。
    调用Action 大多数控制器都继承自Controller基类。对于这些控制器来说,与控制器相关的ControllerActionInvoker对象决定调用控制器类的哪一个Action方法,然后调用。
    执行结果 Action方法接收用户输入,通过返回一个结果类型来执行结果。可执行的结果包括:ViewResult,RedirectToRouteResult、RedirectResult、ContentResult、JsonResult和EmptyResult。
  • 相关阅读:
    Android实现 再按一次退出 的三种方法 durationTime、timerTask 和Handler
    Android中使用Handler造成内存泄露的分析和解决
    Android上成功实现了蓝牙的一些Profile
    A2DP和AVRCP蓝牙音频传输协议的应用解释
    [LeetCode]Climbing Stairs
    Android该系统提供的服务--Vibrator(振子)
    阅读UML类图和时序图
    js如果你想删除您问
    【Win7】【磁盘管理】删除相似“33fbc1d57e9aaf1ea88e6f08”缓存目录
    Linux使用快捷键,who命令,rm命令,ps命令,cd,命令kill命令,find命令,grep命令,tar命令(gz、tar、bz2),用户管理,vim配置的一部分,相关命令
  • 原文地址:https://www.cnblogs.com/libingql/p/2427607.html
Copyright © 2020-2023  润新知