Asp.net mvc 知多少(一)

本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问http://www.dotnettricks.com/free-ebooks自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。
由于个人技术水平和英文水平也是有限的,因此错误在所难免,希望大家多多留言指正。
系列导航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
Asp.net mvc 知多少(四)
Asp.net mvc 知多少(五)
Asp.net mvc 知多少(六)
Asp.net mvc 知多少(七)
Asp.net mvc 知多少(八)
Asp.net mvc 知多少(九)
Asp.net mvc 知多少(十)

本节主要讲解MVC的基本概念

Q1. 什么是MVC?
Ans. MVC是Model-View-Controller的简称。它是在1970年引入的软件设计模式。MVC 模式强迫关注分离 — 域模型和控制器逻辑与UI是松耦合关系。从而使应用程序的维护和测试更加简单容易。


Q2. 解释一下MVC设计模式?

MVC模式

Ans. MVC 设计模式将应用程序分解成3个主要部分: Model, View, Controller(模型、视图、控制器)

Model - 模型代表一系列类用来描述业务逻辑,比如业务模型以及数据访问操作,再比如数据模型。同时也定义了对数据如何进行处理的业务规则。

View - 视图代表的是UI部分,像CSS、jquery、html等。它主要的职责是展现从controller接受到数据或模型。

Controller - 控制器职责在于处理传入的请求。它接受用户通过视图的输入,然后对用户输入的数据模型进行处理,最终通过视图将结果渲染给用户。通常来讲,控制器在视图和模型之间扮演着桥梁(协调者)的角色。


Q3. 什么是领域驱动设计开发?
Ans. Domain-Driven Design (DDD)定义了一系列的准则和模式从而时开发者针对不同的领域采取合适的设计方案以开发出优美的系统。DDD既不是一项技术也不是一套方法论。DDD主要由Entity, Value Object, Aggregate, Service, Repository五大部分组成。
Entity(实体):具有唯一标志的对象,比如用户。
Value Object(值对象):不具有唯一标志的对象,比如枚举。一个值对象也可以是一个实体视情况而定。
Aggregate(聚合): 它通过定义对象之间清晰的所属关系和边界来实现领域模型的内聚,并避免了错综复杂的难以维护的对象关系网的形成。聚合定义了一组具有内聚关系的相关对象的集合,我们把聚合看作是一个修改数据的单元。领域模型:聚合、聚合根详解
Service(服务):服务是在应用程序中用来处理业务逻辑的。
Repository(仓储):仓储的作用是数据的存储读取,即封装数据持久化框架。它不关心使用何种数据库。仓储也不是我们常说的Data Access Layer(数据操作层),但是为了安全因素,仓储会引用一个位置进行存储。仓储的主要职责是处理聚合的和持久化相关的任务(ADD、UPDATE、DELETE、GET)。

MSDN关于DDD的介绍


Q4. 解释一下MVP模式?

MVP 模式

Ans. MVP与MVC相似,只是将MVC的Controller替换成Presenter。MVP模式将应用程序分解成3个主要部分: Model, View, Presenter。

Model - 模型代表一系列类用来描述业务逻辑,比如业务模型以及数据访问操作,再比如数据模型。同时也定义了对数据如何进行处理的业务规则。

View - 视图代表的是UI部分,像CSS、jquery、html等。它主要的职责是展现从controller接受到数据或模型。

Presenter - 职责在于处理视图上的UI行为事件。通过View接收用户输入,然后通过Model处理用户数据,然后将结果传回view。不想View和Controller,View和Presenter之间完全解耦,是通过接口进行交互。同时它也不处理和接收传入的请求。

MVP模式通常用在Asp.net Web Form、Windows Form 应用程序
MVP模式的关键点:

  1. 用户与View直接交互.
  2. View与Presenter是1对1关系,一个View对应一个Presenter
  3. View 与 Model 不发生联系,都通过 Presenter 传递。
  4. 各部分之间的通信,都是双向的。
  5. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

Q5. 解释一下MVVM 模式?

MVVM模式

Ans. MVVM 是指 Model-View-View Model. MVVM支持在View与ViewModel之间进行双向数据绑定。通过视图模型的状态就能够自动的传播改动到View。通常来说,ViewModel是通过观察者模式将ViewModel的改动通知到View。
Model - 模型代表一系列类用来描述业务逻辑,比如业务模型以及数据访问操作,再比如数据模型。同时也定义了对数据如何进行处理的业务规则。

View - 视图代表的是UI部分,像CSS、jquery、html等。它主要的职责是展现从controller接受到数据或模型。

View Model - ViewModel 的职责是暴露方法、命令以及属性去维护View的状态,操纵Model 作为View执行的结果,以及触发View上自身的事件。

MVVM模式的关键点:

  1. 用户与View直接交互。
  2. View与ViewModel是1对多关系,一个View可以对应多个ViewModel。
  3. View保存一个对ViewModel的引用,但是ViewModel对于View一无所知。
  4. View和ViewModel之间的数据绑定是双向的。

Angular就是使用这种模式。


Q6. 什么是 ASP.NET MVC?
Ans. ASP.NET MVC 是一套基于Microsoft .NET Framework的用来开发web应用程序的开源框架。它确保了代码的干净整洁且关注分离. ASP.NET MVC framework 具有很好的扩展性以及支持自定义。


Q7. MVC模式在ASP.NET下是如何工作的?
Ans. 我们按照Model、View、Controller的顺序来一一解释:
The Model in ASP.NET MVC
ASP.NET MVC 中的Model可以分解成几个不同的层:

  1. Objects or ViewModel or Presentation Layer - 这一层包含的简单对象或复杂的对象用来进行特定的强类型View的展示。这些对象用来从Controller传递数据到强类型的View,反之亦然。这些对象对应的类通过数据注解指定定的验证规则。通常来说,这些类拥有你想要展示到对应View/Page的属性。
  2. Business Layer - 主要用来实现业务逻辑和数据验证。同时通过数据访问层(DAL)将数据持久化到数据库。这一层被Controller直接调用去处理用户输入并将结果返回到View
  3. Data Access Layer - 提供对象去访问和操作数据库。通常来说,这一层主要使用一些ORM框架比如EF、NHibernate。


    MVC pattern in ASP.NET MVC

The View in ASP.NET MVC
View就是展示从Controller传递的数据。同时肩负着将Model进行转换以在View的UI上进行展示。
The Controller in ASP.NET MVC
响应Http请求并根据传入的请求内容决定由哪个具体的Action去处理。它通过View接收用户输入,然后通过Model的帮助去处理用户数据并将结果返回给View.


Q9. ASP.NET MVC相对于Web Forms的优势有哪些?
Ans. 主要有以下几点优势:

  • Separation of concern(关注分离) - MVC设计模式将Asp.net MVC 应用程序分成三个部分,View、Controller、Model。更容易的去处理程序的复杂性问题。
  • TDD(测试驱动开发)- 更好的支持测试驱动开发。
  • Extensible and pluggable (扩展性好)- MVC支持可插拔、可扩展。因此更容易进行替换和自定义。
  • Full control over application behaviour (对应用程序的完全控制)- MVC 不使用View State,且不依赖于Server。促使程序员可以更好的控制应用的行为同时减少对Server请求的带宽。
  • ASP.NET features are supported (强大Asp.net 功能支持)- MVC 框架是基于Asp.net 设计的,因此可以使用Asp.ent包含大部分功能,比如认证、授权,权限和角色控制、缓存、Session等。
  • URL routing mechanism (路由机制)- MVC 框架提供了一个强大的Url路由机制,以便我们构建易理解易搜索的URLS。这个路由机制提高了应用程序的可访问性,同时利于搜索引擎优化。

Q10. 简要介绍下ASP.NET MVC的版本更新?
Ans. 以下是ASP.NET MVC的主要版本及版本特性:
ASP.NET MVC1

  • 2009-3-13 发布
  • 基于 .NET 3.5、Visual Studio 2008 、Visual Studio 2008 SP1运行
  • 基于WebForm引擎的MVC模式架构
  • Html Helpers
  • Ajax helpers
  • Routing
  • Unit Testing

ASP.NET MVC2

  • 2010-3-10发布
  • 基于 .NET 3.5, 4.0,Visual Studio 2008 & 2010运行
  • 基于lambda表达式强类型的HTML帮助器方法
  • Templated Helpers(模板帮助器)
  • UI helpers 支持自动脚手架功能及自定义模板
  • 支持DataAnnotations属性注解以支持客户端服务端双重数据验证
  • 重载了HTTP谓词 GET, PUT, POST, and DELETE
  • Areas
  • 异步控制器

ASP.NET MVC3

  • 2011-1-13发布
  • 基于 .NET 4.0 、Visual Studio 2010运行
  • Razor view engine
  • 加强了数据验证
  • Remote Validation(远程验证)
  • Compare Attribute(比较属性)
  • Session less Controller
  • Child Action Output Caching
  • Dependency Resolver(依赖注入)
  • 支持 Entity Framework Code First
  • Partial-page output caching
  • 添加了ViewBag动态属性以支持Controller与View间的数据传递
  • Global Action Filters
  • 更好的Javascript支持: 非侵入式JavaScript, jQuery 验证, JSON 绑定
  • 使用 NuGet 平台去交付和管理依赖

ASP.NET MVC4

  • 2012-8-15发布
  • 基于.NET 4.0, 4.5 、Visual Studio 2010SP1 & Visual Studio 2012运行
  • ASP.NET WEB API
  • 对默认的项目模板进行更新和加强
  • 提供了基于Jquery Mobile的移动项目模板
  • Display Models
  • Task support for Asynchronous Controllers
  • Bundling and minification(捆绑和微小)
  • 支持 Windows Azure SDK

ASP.NET MVC5

  • 2013-10-17发布
  • 基于 .NET 4.5, 4.5.1& Visual Studio 2012 & Visual Studio 2013运行
  • One ASP.NET
  • ASP.NET Identity
  • ASP.NET Scaffolding
  • Authentication filters(身份验证过滤器 - ASP.NET MVC管道中的授权过滤器之前运行)
  • 引入了Bootstrap
  • ASP.NET WEB API2

Q11. 三层架构与MVC架构的区别在哪?

三层架构

Ans. 三层架构是一个线性的架构,主要包括:展现层、业务逻辑层、数据访问层。用户直接与展现层交互。
MVC架构是一个三角形架构,将应用程序分成三个部分,Model、View、Controller。用户在View的帮助下与Controller交互。
MVC不会替换掉三层架构;往往三层架构与MVC是一起使用的,MVC扮演三层架构中的展现层。


MVC架构

Q12. ASP.NET WebForm 与 ASP.NET MVC的区别是什么?
Ans. 主要的区别详细见下表:

Web Forms MVC
事件驱动开发模型 轻量级的基于MVC模型的开发模型
服务端控件 Html Helper
状态管理技术(View State、Session) 没有自动的状态管理
基于文件路径的路由 基于路由的Urls
遵循WebFrom语义 遵循Razor引擎语义
View与业务逻辑紧耦合(.aspx,.aspx.cs) View与业务逻辑分离
通过Master Page(母板页)进行统一布局 使用Layout 统一布局
通过User Controls 进行重用 通过Partial View进行重用
有内置的数据控件,操作数据比较方便 轻量级的,提供全面的控制标记和支持许多功能,允许快速和敏捷发展。因此,它是最好的用最新的Web标准开发Web交互应用程序。
非开源 开源
主要区别
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容