目录索引:《ASP.NET MVC 5 高级编程》学习笔记html
用Visual Studio建立了一个新的ASP.NET MVC应用程序后,将自动向这个项目中添加一些文件和目录。
如图所示:web
用Internet Application模板建立ASP.NET MVC项目后有8个顶级目录。
如图所示:编程
若是不喜欢这个目录结构,怎么办?
ASP.NET MVC并非非要这个结构。
事实上,那些处理大型引用程序的开发人员一般跨多个项目来今个应用程序,以便使该应用程序更易于管理。
(例如,数据模型的实体类经常位于一个来自单独的类库项目中)。
然而,默认的项目结构确实提供了一个很好的默认目录约定,使得系统的关注点变得明确、清晰。设计模式
当进行扩展时,请注意关于这些文件或文件夹的如下内容:框架
1. /Controllers目录
展开这个文件夹,将会发现Visual Studio默认向里面添加了默认的Controller类。
如图所示:单元测试
2. /Views目录
展开这个文件夹,将会发现3个子目录(/Home、/Account和/Shared)以及其中的一个模板文件。
这些子目录也是默认添加到当前项目中的,如图所示:学习
3. /Content和/Scripts目录
展开这个目录,将会发现几个CSS文件(用于调整站点上全部HTML文件的样式)以及Javascript库(能够启用应用程序中的jQuery支持)。
如图所示:测试
4. /BookStore.Test项目
展开这个项目,将会发现一个类,其中包含全部对应于HomeController类的单元测试。
如图所示:设计
这些由Visual Studio天际的默认文件提供了一个能够运行的应用程序的基本结构。
完整地包括了首页、关于页面、帐户登陆/退出/注册页面以及一个未经处理的错误页面(全部页面彼此联系起来,能够直接使用)。调试
默认状况下,ASP.NET MVC应用程序对约定的依赖性很强。
这样就避免了开发人员配置和指定一些项,由于这些项能够根据约定来推断。
例如,当解析视图模板时,ASP.NET MVC采用一种基于约定的目录命名结构。
这个约定能够实现当从Controller类中引用视图引擎时,省略位置路径信息。
默认状况下,ASP.NET MVC会从应用程序下的\Views\[ControllerName]\目录中查找视图模板文件。
设计ASP.NET MVC是围绕着一些基于约定的默认项,这些默认项在须要的时候能够被覆盖。这个概念一般称为“约定优于配置”。
在Ruby on Rails上约定优于配置的概念流行开来,它的本质意义在于:到目前为止,您已经知道如何建立Web应用程序,如今将以之前积累的经验应用于框架中,之后开发就不必再配置每一项。
经过查看应用程序运行的三个核心目录,能够在ASP.NET MVC中看到这一律念:
1. Controllers
2. Models
3. Views
不必在web.config文件中设置这些文件夹名称 —— 他们约定在配置文件中。
这样就避免了编辑XML文件(如web.config)的工做。
例如,为了显示地告诉MVC引擎“能够在Views目录中查找程序视图” —— 这些程序都已经知道,这就是约定。
这不是魔术,但实际上又是,可是它又不是那种黑魔术(结果出人意料的,甚至伤害到本身的魔术)。
ASP.NET MVC的约定很是容易理解,下面是预期的程序结构:
1. 每一个Controller类的名字以Controller结尾,例如ProductController、HomeController等,这些类在/Controllers目录中。
2. 应用程序的全部视图放在一个单独的Views目录下。
3. 控制器使用的视图是在Views主目录的一个子目录中,这个子目录是根据控制器名称(后面减去Controller的后缀)来命名的。
例如“HomeController”使用的视图就放在“/Views/Home”中。
全部可重用的UI元素都位于一个类似的结构中,而不是所有都直接存在Views文件夹里面。
相关的内容会在后面操做视图的时候回着重介绍。
编写代码进行通讯主要面向两个不一样的方面:
1. 须要将清晰的无二义性的指令传递给计算机,让它去执行。
2. 须要让开发人员读懂你的代码,以便后期系统的维护、调试以及完善。
前面已经讨论了约定优于配置如何高效地将开发者的想法意图传达给MVC。
约定也能帮助开发者清晰地和其余开发人员(或者之后的本身)进行交流。
没必要详细地描述如何构建应用程序的每个方方面面,按照共同的约定能够是世界上全部的ASP.NET MVC开发人员公用一个公共的标准。
一般,软件设计模式的优点之一是他们创建了一种标准语言。
因为ASP.NET MVC采用了MVC模式以及一些独特的定义,这让ASP.NET MVC开发者可以轻松地理解不是本身编写的代码或之前编写可是如今忘记了的代码,即使在大型的系统中也是这样。
想象一下,国家不一样,语言不通,肤色不一样,可是写的代码都是按照默认约定走的,你是否是也能看懂了?哈哈。