本系列主要翻译自《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设计模式?
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模式?
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模式的关键点:
- 用户与View直接交互.
- View与Presenter是1对1关系,一个View对应一个Presenter
- View 与 Model 不发生联系,都通过 Presenter 传递。
- 各部分之间的通信,都是双向的。
- View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。
Q5. 解释一下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模式的关键点:
- 用户与View直接交互。
- View与ViewModel是1对多关系,一个View可以对应多个ViewModel。
- View保存一个对ViewModel的引用,但是ViewModel对于View一无所知。
- 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可以分解成几个不同的层:
- Objects or ViewModel or Presentation Layer - 这一层包含的简单对象或复杂的对象用来进行特定的强类型View的展示。这些对象用来从Controller传递数据到强类型的View,反之亦然。这些对象对应的类通过数据注解指定定的验证规则。通常来说,这些类拥有你想要展示到对应View/Page的属性。
- Business Layer - 主要用来实现业务逻辑和数据验证。同时通过数据访问层(DAL)将数据持久化到数据库。这一层被Controller直接调用去处理用户输入并将结果返回到View
-
Data Access Layer - 提供对象去访问和操作数据库。通常来说,这一层主要使用一些ORM框架比如EF、NHibernate。
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扮演三层架构中的展现层。
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交互应用程序。 |
非开源 | 开源 |