本系列主要翻譯自《ASP.NET MVC Interview Questions and Answers 》 By Shailendra Chauhan,想看英文原版的可訪問 "http://www.dotnettricks.com/free ebooks" 自行下載。該書主要分為兩部分,ASP.N ...
本系列主要翻譯自《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 知多少(三)
本節主要講解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)。
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交互應用程式。 |
非開源 | 開源 |