三、理解MVC应用程序结构
使用Visual Studio创建一个新的ASP.NET MVC应用后,会自动为项目生成一些文件和目录,如图1-10所示.。 ASP.NET MVC项目默认有六个顶级目录,如表1-1所示。
表1-1:默认顶级目录
目录 | 用途 |
/Controllers | 用来放处理URL 请求的Controller类 |
/Models | 用来放表示及操作数据业务对象的类 |
/Views | 用来放负责表示输出(例如HTML)的用户界面模板文件的位置 |
/Scripts | 放JavaScript库文件和脚本(.js)的位置 |
/Content | 放置CSS,图片文件以及其他非动态或JavaScript的内容 |
/App_Data | 用来存储想要读写的数据文件的位置 |
假如我不喜欢这种目录结构该呢?
ASP.NET MVC并不强制要求使用该结构。事实上,开发人员在进行大型应用开发时会将应用程序划分为多个项目,从而使其更加方便管理(例如,数据模型类经常被分离出来,单独放置在一个类库项目中)。不过,默认生成的项目结构确实提供了不错的目录惯例,你可以通过使用它来保持清晰的应用程序关注点。
注意下面这些文件和目录。当你展开时:
- /Controller文件夹:你会发现Visual Studio默认向项目中添加了两个controller类——HomeController和AccountController(图1-11)。
- /Views文件夹:你会发现默认向项目中添加了三个子目录——/Account, /Home, /Shared,以及里面包含的一些模板文件(如图1-12)。
- /Content和/Sripts文件夹,你会发现用于控制整站HTML样式的Site.css文件,以及使项目支持jQuery的JavaScript类库(如图1-13)。
- MvcMusicStore.Tests项目:可以看到两个类,包含了关于Controller类的单元测试(见图1-14)。
这些由Visual Studio添加的默认文件,为你提供了一个可用的应用程序的基本结构,结束时已经包含了主页,关于页面,账号登录、注销、注册页面,以及错误处理页面。
ASP.NET MVC和惯用约定
ASP.NET MVC应用程序在很大程度默认依赖于惯用约定。它使开发人员能够避免进行一些可以基于约定推断出来的配置和定制等。
例如,MVC使用当处理view模板时,MVC使用基于约定的目录命名结构,这些约定使你在controller类引用view时忽略其物理路径。ASP.NET MVC默认会在项目的\Views[ControllerName]\文件夹查找view模板文件。
MVC是围绕着一些明显的基于约定默认值来设计的,当然如过需要的话可以被重写。这个概念通常被称作“约定由于配置”(convention over configure)。
约定由于配置(Conventon over Configureation)
约定由于配置的概念是在若干年前由Ruby on Rails流行而来的,主要含义是:
到现在为止,我们知道应该如何构建一个web应用程序。那么我们来把这些经验融合到框架中,这样我们就不必每次都重新进行所有配置。
通过查看应用程序运行的三个核心文件夹,我们就可以在ASP.NET MVC的工作中发现此概念:
- Controllers
- Models
- Views
你不必在web.config文件中设置这些文件夹名称——按照约定他们会在那里。这就省去了必须编写像web.config这样的XML文件的工作。例如,为了明确的告诉MVC引擎,“你可以在Views路径找到我的views”——它已经知道了。这是一个约定。
This isn’t meant to be magical. Well, actually, it is; it’s just not meant to be black magic — the kind of magic where you may not get the outcome you expected (and moreover can actually harm you). ASP.NET MVC’s conventions are pretty straightforward. This is what is expected of your application’s structure:
这并不是神乎其神的。不过,事实上它确实是。不过它并不是巫术——从这种魔术那里可能得不到你所预期的结果(此外,还可能会伤害到你)。ASP.NET MVC中的约定是非常简单的,下面将是你的软件结构:
- 每个Controller类命名都以Controller结尾——如ProductController、HomeController等,都存在于Controllers目录。
- 有一个单独的Views目录存放程序中所有的Views。
- Controllers所使用的Views都在Views主目录下的子目录中,并且根据controller名称进行命名(去除Controller后缀)。例如,前面提到的ProductController对应的view存在于 /Views/Product文件夹中。
所有可共用的UI元素都以类似的结构存在,不过是在Views文件夹下的Shared目录中。在第3章中会了解更多关于Views的信息。
约定简化沟通(Conventions Simplify Communication)
你编写代码来进行表达和交流。主要要向两类不同的观众进行表述:
- 你必须清楚明白地向计算机传到执行指令;
- 想要开发者能够定位并阅读你的代码,以便于进行后续的维护、调试和扩展
我们已经讨论了约定优于配置原则是如何帮你高效地向MVC表达你的意图的。约定还能使你清楚地同其他开发人员(包括今后自己)进行交流沟通。遵循通用的约定使全世界的MVC开发人员能够在所有的程序中具有共同的基准,这样就避免了对程序结构的每个方面进行反复的讲述。软件设计模式通常的优点之一是它建立了一个标准的语言。由于ASP.NET MVC应用了MVC模式,并且包含了一些自己的约定惯例,使得MVC开发人员即使在大型项目中也很容易看懂并非他们自己编写(或者不记得写过)的代码。
四、 总结
本章涉及面较广,首先从ASP.NET MVC简介开始,介绍了ASP.NET web框架和MVC软件模式如何融合成强大的系统来构建web应用程序。你可以看到ASP.NET MVC怎样经历两个版本而臻于成熟,较深入地介绍了ASP.NET MVC 3的特征和重点。基于这些基础,进行了开发环境的安装并且开始创建一个简单的MVC3应用。最后,查看了MVC 3应用程序的结构和构件。从第2章的Controllers开始,在后面的章节中我们会更加深入的了解这些组成部分的细节。
本文转自 陈敬(Cathy) 博客园博客,原文链接:http://www.cnblogs.com/janes/archive/2012/04/03/2426796.html,如需转载请自行联系原作者