本系列主要翻譯自《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 知多少(七)
本節主要講解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交互應用程序。 |
非開源 | 開源 |