1.什么是ASP.NET MVC?

(1)它是个怎么样的产品?

ASP.NET MVC是微软公司.NET平台上的一个Web开发框架,它为开发者提供了一种构建结构良好的Web应用程序的方式。自2007年首次公布预览以来,作为Web Form的替代品,ASP.NET MVC的普及度已明显提高,现在很多大型Web应用程序都是使用这一技术构建的。

(2)自治视图

对于大部分面向最终用户的应用来说,它们都需要具有一个可视化的UI界面与用户进行交互,我们将这个UI称为视图(View)。在早期,我们倾向于将所有与UI相关的操作糅合在一起,这些操作包括UI界面的呈现、用户交互操作的捕捉与响应、业务流程的执行以及对数据的存取,我们将这种设计模式称为自治视图(Autonomous View, AV)。

说到自治视图,很多人会感到陌生,但是我们可能经常在采用这种模式来设计我们的应用。Windows Forms和ASP.NET Web Forms虽然分别属于GUI和Web开发框架,但是它们都采用了事件驱动的开发方式,所有与UI相关的逻辑都可以定义在针对视图的后台代码(Code Behind)中,并最终注册到视图本身或者视图元素(控件)的相应事件上。

一个典型的人机交互应用具有三个主要的关注点,即数据在可视化界面上的呈现、UI处理逻辑(用于处理用户交互式操作的逻辑)和业务逻辑。自治视图模式将三者混合在一起,势必会带来如下一些问题:

  • 业务逻辑是与UI无关的,应该最大限度地被重用。然而在自治视图中,业务逻辑定义在视图中,完全与视图绑定在一起,丧失了重用的可能。
  • 业务逻辑具有最强的稳定性,UI处理逻辑次之,而可视化界面上的呈现最差。然而自治视图将具有不同稳定性的元素融为一体,那么具有最差稳定性的元素决定了整体的稳定性,这就是“短板理论”在软件设计中的体现。
  • 任何涉及UI的组件都不易测试。UI是呈现给人看的,并且用于与人进行交互,用机器来模拟活生生的人来对组件实施自动化测试不是一件容易的事,自治视图严重损害了组件的可测试性。

为了解决自治视图导致的这些问题,我们需要采用关注点分离(Seperation of Concerns, SoC)的方针将可视化界面呈现、UI处理逻辑和业务逻辑三者分离出来,并且采用合理的交互方式将它们之间的依赖降到最低。将三者“分而治之”,自然也使UI逻辑和业务逻辑变得更容易测试,测试驱动设计与开发变成了可能。这里用于进行关注点分离的模式就是MVC.

(3)MVC是什么?

MVC不是一种编程语言,严格来说也不算是一种技术,而是一种开发架构,一种开发观念,或者说是一种程序设计模式。为了简化软件开发的复杂度,以一种概念简单却又权责分明的架构来贯穿整个软件开发流程,将业务逻辑层与数据表现层的分割,将业务逻辑和后端数据分离,以编写出更具模块化、可维护性更高的程序。MVC已经在数十种框架中应用,在Java和C++语言中、在Mac和Windows操作系统中,以及在很多架构内部都用到了MVC。

MVC将软件开发过程大致分割成3个主要单元,分别为模型(Model)、视图(View)和控制器(Controller)。

  • 模型:一组类,描述了要处理的数据以及修改和操作数据的业务规则,建立领域模型,例如,博客,模型可能是帖子和评论;
  • 视图:html网页,定义应用程序用户界面的显示方式,模型的可视化表示,例如表现博客帖子的HTML;
  • 控制器:一组类,提供视图和模型之间关联的协调程序,用于处理来自用户、整个应用程序流以及特定应用程序逻辑的通信,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据,例如,控制器可能要找出一篇帖子的最新评论(模型),并将它们传递给视图进行渲染。

总的说来,控制器接受用户输入,构造适当的模型,然后将其传递给视图。控制器和视图对模型都有依赖性,但模型本身对控制器和视图是一无所知的,如下图所示。

这是一种在Web开发领域非常流行的设计模式。与Web Form不同,在构造Web应用程序时,ASP.NET MVC采用了一种不同的方法。这意味着你不必处理ASPX页面和控件、回递或视图状态,或复杂的事件生命周期。取而代之是定义控制器、动作以及视图。然而,两者的底层ASP.NET平台是相同的,可以在同一个应用程序中混合使用MVC和Web Form页面。各种ASP.NET Web技术之间的关系如下图所示。

ASP.NET Web Pages是与ASP.NET MVC3同一时间发布的,为期望学习使用ASP.NET平台的新手而设计,并作为Web Form与MVC的一种更简单的替代品。可以在Visual Studio中开发,也可以在简化的IDE——WebMatrix中开发。

2.ASP.NET MVC历史与现状

(1)Web开发发展过程

CGI(公共网关接口)-->ASP(Active Server Pages,活动服务器页面)-->.NET

事实上在常引用的网站开发架构中,还可分为 Model 1 与 Model 2。

Model 1 还可分为二至三种,如下:

  • 第一种是将 HTML 和 .NET (Java) code 混在一起,俗称意大利面式的写法,如:ASP。这种 Inline code 最为人垢病的问题是程序可读性低、难以维护。
  • 第二种是由与 .aspx 一对一对应的 Code-Behind code 直接存取数据库,亦即二层式的架构。但这样的缺点是程序代码难以重复使用,且因为逻辑已经写死在固定的页面中,会造成系统日后扩充困难。
  • 第三种是经由自定类别库、App_Code 数据夹中的自定类或软件组件,去存取数据库,或做商业逻辑的运算。但此种做法仍缺乏流程的统一控管,导致每一支 ASPX 都要验证使用者身份、验证 request 的参数、处理 Session、做例外处理,甚至包括 View 里的编码原则、语系设定,都得在每一支 ASPX 对应的 Code-Behind 去处理,也因此不适合大型系统的开发、扩充和维护。这种架构虽然也能做到虚拟式的三层式或多层式架构,但也是目前 ASP.NET 2.0 的极限。

至 于 Model 2,即俗称的 MVC Framework,则加入了 Controller 的部分,将流程及事件交由中心控管,除了可让整个系统的运作流程更为明确,有效切开各层的工作,亦可避免让 View 里的 Code-Behind 去处理 Model 中的数据库存取、商业逻辑运算,也不必再到处撰写「流程传递和转向」的程序代码,而改由中央的 Controller 程序代码 (action method) 来统一控管。

(2)ASP.NET Web Form

ASP.NET Web Form是微软建立在核心的ASP.NET库之上的第一个Web开发框架,围绕事件驱动的页面生命周期而建立的,在渲染的页面上可以触发事件。用户界面元素被定义为控件,每个控件负责自身的渲染过程,并有一组自己的事件。这种方法虽然对于具有Visual Basic 6或Windows Form背景的开发人员来说较为熟悉,但传统的Web开发人员却感觉背道而驰,因为它背离了HTTP基础而进行了抽象,,并在Web上强迫实行状态化模型,然而Web本质上是无状态的。并且,在ASP.NET Web Form项目中想要对后台代码文件中的代码进行单元测试,毫无希望。

(3)ASP.NET MVC发展过程

  • ASP.NET MVC 1,2007年2月发布
  • ASP.NET MVC 2,2010年3月发布
  • ASP.NET MVC 3,2011年1月发布
  • ASP.NET MVC 4,2011年9月发布(特别提醒:我们上课用4哦)
  • ASP.NET MVC 5,2014年1月发布

3.ASP.NET MVC的优点

ASP.NET MVC解决了ASP.NET Web Form的许多缺点。当在.NET平台上开发新的应用程序时,这使ASP.NET MVC成为一种更好的选择。

(1)关注点分离

ASP.NET Web Form将用户界面与其后台代码紧密耦合在一起,而ASP.NET MVC却是鼓励将用户界面(视图)与驱动界面的代码(控制器)保持分离的一种设计方式。如果实现良好,便意味着开发人员更易于理清应用程序的脉络,也使应用程序更易于维护——对控制器的修改不一定意味着也必须修改用户界面

(2)大型开发的时候容易维护,扩展性很好

(3)能够进行单元测试,保证功能的实现

通过将应用逻辑从用户界面分离出来,ASP.NET MVC更易于独立地测试个别组件。可以将控制器与用户界面的测试分开进行。

(4)易于分工的架构

      由于关注点分离的特性,所以在项目开发的初期就能够进行分工,不用等到核心的函数库都完成后,才开始进行开发或集成。

(5)对HTML代码和HTTP的严密控制力

(6)强大的路由系统

(7)开放特性与社群支持

      ASP.NET MVC从第一版正式版以来,就以微软公众授权(MS-PL)开放源代码,也就是说,除了可以以ASP.NET MVC技术开发之外,还能自行更改、扩充ASP.NET MVC的核心架构,甚至发型自己更改过的版本,大家还可以到CodePlex网站下载ASP.NET MVC 4.0源代码回去研究。

下面列出几个跟ASP.NET MVC相关的学习网站与讨论区,如果遇到问题,可以到论坛上发问。

1.1 ASP.NET MVC简介的更多相关文章

  1. ASP.NET MVC教程一:ASP.NET MVC简介

    一.MVC模式简介 MVC模式是一种流行的Web应用架构技术,它被命名为模型-视图-控制器(Model-View-Controller).在分离应用程序内部的关注点方面,MVC是一种强大而简洁的方式, ...

  2. 第1章 (ASP.NET MVC简介)

    一.MVC概念 MVC由三部分组成:视图(View).模型(Model).控制器(Controller)组成 二.运用VS创建MVC 1.新建一个"解决方案" 2.在"解 ...

  3. ASP.NET MVC 简介

    1. ASP.NET MVC 是什么? ASP.NET MVC是微软官方提供的以MVC模式为基础的ASP.NET Web应用程序(Web Application)框架,它由Castle的MonoRai ...

  4. ASP.NET MVC简介

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...

  5. ASP.NET MVC 简介(附VS2019和VSCode版示例)

    MVC可以理解为一种思想,应用在web应用程序的架构上. ASP.NET MVC的核心类是实现了IHttpHandler接口的MVCHandler,它的底层仍然是HttpHandler.HttpReq ...

  6. ASP.NET MVC 5 01 - ASP.NET概述

    本篇目录: ASP.NET 概述 .NET Framework 与 ASP.NET ASP.NET MVC简介 ASP.NET的特色和优势 典型案例 ▁▃▅ ASP.NET概述 ▅▃▁ 目前开发B/S ...

  7. 北大青鸟进入ASP.NET MVC的世界(一)

    今天我们开始ASP.NET  MVC 4.0课程的学习第一讲.我们今天主要关注如下5个问题: 1.理解ASP.NET MVC程序的执行过程 2.会使用ASP.NET中的系统对象 3.会搭建ASP.NE ...

  8. 推荐几本不错的ASP.NET MVC书

    以前主要是做PHP应用的,由于工作需要,捡起来.NET, 特别是新技术层出不穷,找了几本书看,个人感觉还不错,网上也有电子版的下载 一. ASP.NET MVC4 Web 编程 O'Reilly出版社 ...

  9. ASP.NET MVC 4高级编程(第4版)

    <ASP.NET MVC 4高级编程(第4版)> 基本信息 作者: (美)Jon Galloway    Phil Haack    Brad Wilson    K. Scott All ...

随机推荐

  1. iOS开发debug跟release版本屏蔽NSLog方法

    1.在***-Prefix.pch里面添加 #ifndef __OPTIMIZE__ # define NSLog(...) NSLog(__VA_ARGS__) #else # define NSL ...

  2. 我的android学习经历29

    四大组件之广播接收者BroadcastReceiver 新建广播接收器 需要新建一个类继承类BroadcastReceiver,并且重写其中的方法onReceive(),不要在这个方法中添加过多的逻辑 ...

  3. Android 进度条

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  4. baidu 快递查询API

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. FZU 2144 Shooting Game

    Shooting Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submi ...

  6. Debian8 远程登录Permission Denied,please try again

    多数是系统没有开启Root登录的权限. 修改root的ssh权限: ① vi /etc/ssh/sshd_config ② 找到配置项PermitRootLogin 将此项的值改为yes ③ 重启ss ...

  7. IP地址验证

    /** * 验证IP地址 * * @param 待验证的字符串 * @return 如果是符合格式的字符串,返回 <b>true </b>,否则为 <b>false ...

  8. CUBRID学习笔记 26 数据类型3cubrid教程

    接上面的集合 集合之 set 每个集合元素是不同的值, 但是类型只能是一种.也可以有其他表的记录 如下 CREATE TABLE set_tbl ( col_1 set(CHAR(1))); INSE ...

  9. 转载java源代码阅读方法

    刚才在论坛不经意间,看到有关源码阅读的),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言 ...

  10. html 实时监控发送数据

    我们都知道ajax可以做异步提交,可以从一个文件里得到返回的数据,如此便能够实时的得到数据,实时刷新页面,如下代码 setInterval(function(){ $.ajax({ url:'demo ...