ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构

APS.Net MVC 浅谈[转] 来自MSDN

点击访问

MVC 理论结构

模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型、视图和控制器。 ASP.NET MVC 框架提供用于创建 Web 应用程序的 ASP.NET Web 窗体模式的替代模式。 ASP.NET MVC 框架是一个可测试性非常高的轻型演示框架,(与基于 Web 窗体的应用程序一样)它集成了现有的 ASP.NET 功能,如母版页和基于成员资格的身份验证。 MVC 框架在 System.Web.Mvc 程序集中定义。

MVC 是许多开发人员熟悉的标准设计模式。 一些类型的 Web 应用程序将得益于 MVC 框架。 一些类型将继续使用基于 Web 窗体和回发的传统 ASP.NET 应用程序模式。 其他类型的 Web 应用程序将结合这两种方法;这两种方法彼此互不包含。 MVC 框架包括以下组件:

  • 模型。 模型对象是实现应用程序数据域逻辑的应用程序部件。 通常,模型对象会检索模型状态并将其存储在数据库中。 例如,Product 对象可能会从数据库中检索信息,操作该信息,然后将更新的信息写回到 SQL Server 数据库内的 Products 表中。 在小型应用程序中,模型通常是概念上的分离,而不是实际分离。 例如,如果应用程序仅读取数据集并将其发送到视图,则该应用程序没有物理模型层和关联的类。 在这种情况下,数据集担当模型对象的作用。
  • 视图。 视图是显示应用程序用户界面 (UI) 的组件。 通常,此 UI 是用模型数据创建的。
  • 控制器。 控制器是处理用户交互、使用模型并最终选择要呈现的视图来显示 UI 的组件。 在 MVC 应用程序中,视图仅显示信息;控制器则用于处理和响应用户输入和交互。 例如,控制器处理查询字符串值,并将这些值传递给模型,而模型可能会使用这些值来查询数据库。

MVC 模式可以帮助您创建使应用程序的不同方面(输入逻辑、业务逻辑和 UI 逻辑)分离的应用程序,同时可在这些元素之间提供松散耦合。 该模式指定每种逻辑在应用程序中应处的位置。 UI 逻辑位于视图中。 输入逻辑位于控制器中。 业务逻辑位于模型中。 在您生成应用程序时,通过使用这种分离方式,可以帮助您化繁为简,因为它可以使您侧重于一次实现应用程序的一个方面。 例如,您可以侧重于独立于业务逻辑的视图。

MVC 应用程序的这三个主要组件之间的松散耦合也可促进并行开发。 例如,一个开发人员可以从事视图方面的工作,第二个开发人员可以从事控制器逻辑方面的工作,第三个开发人员可以侧重于模型中的业务逻辑。

何时创建 MVC 应用程序

您必须仔细考虑是使用 ASP.NET MVC 框架还是使用 ASP.NET Web 窗体模型来实现 Web 应用程序。 MVC 框架未取代 Web 窗体模型;您可以对 Web 应用程序使用任一框架。 (如果您具有现有的基于 Web 窗体的应用程序,则这些应用程序将完全按照它们一贯的方式继续工作。)

在决定对特定网站使用 MVC 框架或 Web 窗体模型之前,请权衡各种方法的优点。

ASP.NET MVC 框架具有以下优点:

  • 通过将应用程序分为模型、视图和控制器,化繁为简的工作更加轻松。
  • 它不使用视图状态或基于服务器的窗体。 这使得 MVC 框架特别适合想要完全控制应用程序行为的开发人员。
  • 它使用一种通过单一控制器处理 Web 应用程序请求的前端控制器模式。 这使您可以设计一个支持丰富路由基础结构的应用程序。
  • 它为测试驱动的开发 (TDD) 提供了更好的支持。
  • 它非常适合大型开发人员团队支持的 Web 应用程序,以及需要对应用程序行为进行严格控制的 Web 设计人员。
基于 Web 窗体的框架具有以下优点:
  • 它支持通过 HTTP 保留状态的事件模型,这有益于开发业务线 Web 应用程序。 基于 Web 窗体的应用程序提供了在数百个服务器控件中受支持的许多事件。
  • 它使用页面控制器模式向单个页面添加功能。
  • 它针对基于服务器的窗体使用视图状态,这使得管理状态信息更加轻松。
  • 它非常适合想要利用大量组件快速开发应用程序的 Web 开发人员和设计人员的小型团队。
  • 通常,对于应用程序开发而言,它比较简单,这是因为组件(Page 类、控件等)紧密集成并且通常需要比 MVC 模型更少的代码
  • 应用程序任务(输入逻辑、业务逻辑和 UI 逻辑)的分离、可测试性和测试驱动的开发 (TDD)。 MVC 框架中的所有核心协定都基于接口并且可使用 mock 对象进行测试,mock 对象是模仿应用程序中实际对象的行为的模拟对象。 您可以对应用程序进行单元测试,而不必在 ASP.NET 进程中运行控制器,这使得单元测试既快速又灵活。 您可以使用任何与 .NET Framework 兼容的单元测试框架。
  • 可扩展且可插入的框架。 设计 ASP.NET MVC 框架组件的目的是为了可以轻松地替换或自定义它们。 您可以插入自己的视图引擎、URL 路由策略、操作方法参数序列化以及其他组件。 ASP.NET MVC 框架还支持使用依赖项注入 (DI) 和控制反转 (IOC) 容器模型。 DI 使您能够将对象注入到类中,而不是依靠类来创建对象本身。 IOC 指定某个对象是否需要其他对象,第一个对象应该从配置文件之类的外部源中获取第二个对象。 这样,测试会更加轻松。
  • 广泛支持 ASP.NET 路由,ASP.NET 路由是一个功能强大的 URL 映射组件,它允许您生成具有易于理解的可搜索 URL 的应用程序。 URL 未必包含文件扩展名,并且旨在支持非常适合搜索引擎优化 (SEO) 和具象状态传输 (REST) 寻址的 URL 命名模式。
  • 支持将现有 ASP.NET 页面(.aspx 文件)、用户控件(.ascx 文件)和母版页(.master 文件)标记文件中的标记用作视图模板。 您可以将诸如嵌套母版页、内联表达式 (<%= %>)、声明性服务器控件、模板、数据绑定、本地化等现有 ASP.NET 功能与 ASP.NET MVC 框架结合使用。
  • 支持现有 ASP.NET 功能。 ASP.NET MVC 允许您使用一些功能,如 Forms 身份验证和 Windows 身份验证、URL 授权、成员资格和角色、输出和数据缓存、会话和配置文件状态管理、运行状况监视、配置系统以及提供程序体系结构。

MVC 框架和应用程序结构

URL 路由

ASP.NET MVC 框架将使用 ASP.NET 路由引擎,通过该引擎可以灵活地将 URL 映射到 controller 类。 您可以定义 ASP.NET MVC 框架使用的路由规则,以评估传入的 URL 以及选择相应的控制器。 您还可以让该路由引擎自动分析 URL 中定义的变量,并让 ASP.NET MVC 框架将值作为参数自变量传递给控制器。

MVC 框架和回发

ASP.NET MVC 框架不使用 ASP.NET Web 窗体回发模型与服务器交互, 而是会将所有最终用户交互路由到 controller 类。 这样可使 UI 逻辑与业务逻辑保持分开并有助于提高可测试性。 因此,ASP.NET 视图状态和 ASP.NET Web 窗体页面生命周期事件不会与基于 MVC 的视图集成。

Web 应用程序 MVC 项目结构

默认情况下项目结构如下

  • App_Data,这是数据的物理存储区。 此文件夹的作用与它在使用 Web 窗体页面的 ASP.NET 网站中的作用相同。大多数情况下其实并不用这个文件夹放置数据库 , 一般项目还是应该把数据库服务器和web服务器分开, 在web.config中配置连接节点连接外部的数据库.
  • Apps: 通常我们把web项目中引用的公用类放在这里 ,比如用户密码加密,分页控件代码,用户登录信息保存等等…
  • Controllers: 这个文件夹主要存放XML文件,系统需要用到的XML信息文件等.
  • Content,建议在此位置添加内容文件,如级联样式表文件、图像等。 通常,Content 文件夹用于存储静态文件。小型项目可以在此文件夹存储用户数据文件 , 更多的应该把用户文件排除在项目之外.
  • Controllers,建议在此位置存储控制器。 MVC 框架要求所有控制器的名称均以“Controller”结尾.比如HomeControllers 此处的Controllers结尾不可删除,要不然路由就无法识别控制器了.
  • Models,这是为表示 MVC Web 应用程序的应用程序模型的类提供的文件夹。 此文件夹通常包括定义对象以及定义与数据存储交互所用的逻辑的代码。 通常,实际模型对象将位于单独的类库中。 但是,在创建新应用程序时,您可以将类放在此处,然后在开发周期中稍后的某个时刻将其移动到单独的类库中。比如利用三层架构的时候Models文件夹里面的东西其实就是Domain层里面的实体.
  • Scripts,建议在此位置存储支持应用程序的脚本文件。 默认情况下,此文件夹包含 ASP.NET AJAX 基础文件和 jQuery 库。
  • Views,建议在此位置存储视图。 视图使用 ViewPage (.aspx)、ViewUserControl (.ascx) 和 ViewMasterPage (.master) 文件,以及与呈现视图相关的任何其他文件。 在 Views 文件夹中,每个控制器都具有一个文件夹;该文件夹以控制器名称前缀命名。 例如,如果控制器名为 HomeController,则 Views 文件夹包含名为 Home 的文件夹。 默认情况下,当 ASP.NET MVC 框架加载视图时,它将在 Views\控制器名称 文件夹中寻找具有请求的视图名称的 ViewPage (.aspx) 文件。 默认情况下,Views 文件夹中也有一个名为 Shared 的文件夹,但该文件夹不与任何控制器相对应。 Shared 文件夹用于存储在多个控制器之间共享的视图。 例如,您可以将 Web 应用程序的母版页放在 Shared 文件夹中。

    在MVC3加入了 Razor视图引擎后.视图的后缀为.cshtml,相对以前的aspx要灵活很多,也没有很多可以可以拖动的控件,ASP.Net MVC 框架设计之初就是为了让开发者更深入的设计web应用程序,所以很多方面都需要自己编写啦…

  • Global.asax文件: 文件中的代码来设置全局 URL 路由默认值 在MVC3中这个文件中还可以放置站点加载时初始化的一些方法.
  • web.config文件: 此文件是一个XML文件, 里面存放着站点的基本配置信息,比如连接数据库节点,站点加载的相关参数等等.
时间: 2024-10-10 10:48:52

ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构的相关文章

[转]我要学ASP.NET MVC 3.0(十二): MVC 3.0 使用自定义的Html控件

本文转自:http://www.cnblogs.com/lukun/archive/2011/08/05/2128693.html 概述   在ASP.NET MVC框架中已经封装了很多基于Html标准的Html控件,我们可以方便的使用这些控件输出想要的内容,使开发变得快捷. 例如ASP.NET MVC框架包括以下设置标准的HTML控件(部分控件): Html.ActionLink() Html.BeginForm() Html.CheckBox() Html.DropDownList() Ht

ASP.NET MVC架构与实战系列之一:理解MVC底层运行机制

今天,我将开启一个崭新的话题:ASP.NET MVC框架的探讨.首先,我们回顾一下ASP.NET Web Form技术与ASP.NET MVC的异同点,并展示各自在Web领域的优劣点.在讨论之前,我对这两种技术都非常热衷,我个人觉得在实际的项目开发中,两者都能让我们受益匪浅,因此是目前Web领域两大平行和流行的技术.我们都知道,在传统的ASP.NET Web Form应用程序中,Microsoft已为我们设计了较为完整.简洁的开发环境,并提供了复杂的处理引擎,开发者只需简单的拖放控件和编写对应的

ASP.NET 使用application和session对象写的简单聊天室程序

ASP.Net中有两个重要的对象,一个是application对象,一个是session对象. Application:记录应用程序参数的对象,该对象用于共享应用程序级信息. Session:记录浏览器端的变量对象,用来存储跨网页程序程序的变量或者对象. 说实话,写了快一年的asp.net,application对象还真没怎么用过.看了看书,根据这两个对象的特性写了一个简单的聊天室程序.真的是非常的简陋. 我的思路是,有两个页面Default页和ChatRoom页,页面布局如图: Default

了解ASP.NET5 Web应用程序结构

本文参考ASP.NET5 官方文档 Understanding ASP.NET 5 Web Apps,加入了一些个人理解,理解不对的地方希望大家能指出,互相学习. ASP.NET 5 针对WEB编程引入了几个新的基本概念,理解这些概念对快速开发WEB应用来说很重要.或许这些这些概念对你来说不是新的,但是对那些使用ASP.NET 和 Visual Studio 进行传统的WEB应用开发的程序员来说,这些概念可能是新的. 本文主要内容包括: ASP.NET 项目结构 Framework 运行时 pr

MVC系列——MVC源码学习:打造自己的MVC框架(四:自定义视图)

前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾.对于这个系列,通过学习源码,博主也学到了很多东西,在此还是把博主知道的先发出来,供大家参考. 本文原创地址:http://www.cnblogs.com/landeanfen/p/6019719.html MVC源码学习系列文章目录: MVC系列——MVC源码学习:打造自己的MVC框架(一) MVC

MVC比WebForm的优势,为什么使用MVC

前言 如果你看了最近微软的议程,你会发现他们现在的焦点除了MVC,还是MVC.问题在于为什么微软如此热衷于丢弃传统的APS.NET Webform而转向ASP.NET MVC?本文就主要来讨论这个问题. ASP.NET Webform 后台代码(behind code)—— 福音与诅咒 如果你密切关注过ASP.NET Webform技术,你会发现它更接近可视化设计,换句话说,开发者只需要从设计面板中拖拽控件即可完成UI,接着在behind code中实现逻辑代码即可完成最后的Web页面功能. 所

MVc分页【关于使用扩展方法实现MVc分页】

近期对MVc自定义分页作了一下小研究下面把他记下来 下述代1,2,3里面的代码可以直接拷贝,4以后的根据情况自己选定 1.在后台任写如下的扩展方法(任一类库都可以,但是用时得引用命名空间) // 添加using System.Web; using System.Web.Mvc; 引用,找不到可以从MVC层拷贝 namespace System.Web.Mvc.Html // 注意一定要把类的命名空间写成System.Web.Mvc.Html { public static class PageE

Spring Web MVC框架(八) 配置Spring Web MVC

这一篇文章对应于Spring参考文档 Configuring Spring MVC,讲的是Spring Web MVC各部分的配置方法,包括Java代码配置和XML文件配置以及MVC命名空间的使用方法. 启用MVC Java配置和XML命名空间 默认配置 要启用MVC Java配置(@Controller等各种注解)和XML命名空间,如果使用的是Java配置,在配置类上再添加@EnableWebMvc注解即可. @Configuration @EnableWebMvc public class

MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)

前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个更加清晰的认识. 本文原创地址:http://www.cnblogs.com/landeanfen/p/6000978.html 这篇博主打算从零开始一步一步来加上MVC里面用到的一些技术,整篇通过三个版本,逐步完善. 一.版本一:搭建环境,实现MVC请求 通过上篇的介绍,我们知道,MVC里面两个最