目录索引:《ASP.NET MVC 5 高级编程》学习笔记

  用Visual Studio创建了一个新的ASP.NET MVC应用程序后,将自动向这个项目中添加一些文件和目录。
  如图所示:

  

  用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天际的默认文件提供了一个可以运行的应用程序的基本结构。
  完整地包括了首页、关于页面、账户登录/退出/注册页面以及一个未经处理的错误页面(所有页面彼此联系起来,可以直接使用)。

一、SP.NET MVC的约定

  默认情况下,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开发者能够轻松地理解不是自己编写的代码或以前编写但是现在忘记了的代码,即便在大型的系统中也是这样。

  想象一下,国家不同,语言不通,肤色不同,但是写的代码都是按照默认约定走的,你是不是也能看懂了?哈哈。

04 入门 - ASP.NET MVC应用程序的结构的更多相关文章

  1. ASP.NET MVC应用程序展示RDLC报表

    原文:ASP.NET MVC应用程序展示RDLC报表 学习ASP.NET MVC这样久,在学习,练习与应用过程中,觉得很多知识与以前的ASP.NET多有区别,但是实现操作起来,细处又有许多相近的地方. ...

  2. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序创建更复杂的数据模型

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第六篇:为ASP.NET MVC应用程序 ...

  3. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序读取相关数据

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第七篇:为ASP.NET MVC应用程序 ...

  4. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序更新相关数据

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第八篇:为ASP.NET MVC应用程序 ...

  5. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序使用异步及存储过程

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第九篇:为ASP.NET MVC应用程序 ...

  6. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序处理并发

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第十篇:为ASP.NET MVC应用程序 ...

  7. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序实现继承

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第十一篇:为ASP.NET MVC应用程 ...

  8. 详解ASP.NET MVC应用程序请求生命周期

    ------转载当一个ASP.NET MVC应用程序提出请求,为了响应请求,包含一些请求执行流程步骤! 在ASP.NET MVC应用程序Http request 和Http response 过程中, ...

  9. NHibernate构建一个ASP.NET MVC应用程序

    NHibernate构建一个ASP.NET MVC应用程序 什么是Nhibernate? NHibernate是一个面向.NET环境的对象/关系数据库映射工具.对象/关系数据库映射(object/re ...

随机推荐

  1. djiango的模板语言(template)

    老师的博客:http://www.cnblogs.com/liwenzhou/p/7931828.html 官方文档:https://docs.djangoproject.com/en/1.11/re ...

  2. 基于Webpack, KnockoutJs,esyui,koeasyui实现类vue-cli生成的模板框架

    前后端分离的开发机制,基本上是开发现代业务系统的标配.可在国内某些特殊领域还是存在大量的以JQuery走天涯的现象,但其中也不泛有追求技术者,如不才的鄙人.不才的本人曾以JQuery走天涯:后又接受了 ...

  3. ReactJs 的各个版本生命周期、API变化 汇总(一、V16.0.0)

    目录 一.React 各个版本之间的纵向对比 二.React 的基础 1.Components and Props 三.React V 16.0.0 1. The Component Lifecycl ...

  4. c#命名规范汇总12条

    前言 在刚学习c#的时候,在脑子根本就么有命名规范这个概念,有了一定入门的基础,也很难严格要求自己去规范代码的命名,工作后,发现自己的命名和其他人的命名总会有一些出入,总会闹出一些尴尬的笑话,这里汇总 ...

  5. es6学习笔记-class之继承

    继承 上一篇学习了class的概念,在es5时,对象的继承有好几种,原型链继承,借用构造函数继承,组合继承,原型式继承,寄生式继承以及寄生组合式继承,都是按照函数的形式去集成的,现在class也有它的 ...

  6. 如何给列表降维?sum()函数的妙用

    上个月,学习群里的 S 同学问了个题目,大意可理解为列表降维 ,例子如下: oldlist = [[1, 2, 3], [4, 5]] # 想得到结果:newlist = [1, 2, 3, 4, 5 ...

  7. 【原】javascript笔记之this用法

    javascript中的this学习起来相对复杂,最近花了点时间研究,总结起来大概这只有5种情况,相信只要熟悉这5种用法,基本是可以解决所有的this问题,文本不介绍this设计原理,只介绍用法,阅读 ...

  8. C# 替换Word文本—— 用文档、图片、表格替换文本

    编辑文档时,对一些需要修改的字符或段落可以通过查找替换的方式,快速地更改.在C# 在word中查找及替换文本一文中,主要介绍了在Word中以文本替换文本的方法,在本篇文章中,将介绍如何用一篇Word文 ...

  9. Git:九、删除项目

    1.删除远程仓库 1)打开有绿色客隆按钮的仓库代码页面,选择Settings 2)把页面拉到最下边 2.删除本地仓库 1)先删.git隐藏文件 2)强行删除仓库文件夹 显示所有文件,包括隐藏的:ls ...

  10. Storm入门(六)深入理解可靠性机制

    转自http://blog.csdn.net/zhangzhebjut/article/details/38467145 一 可靠性简介 Storm的可靠性是指Storm会告知用户每一个消息单元是否在 ...