Asp.net mvc 知多少(一)

本系列主要翻譯自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可訪問http://www.dotnettricks.com/free-ebooks自行下載。該書主要分爲兩部分,ASP.NET MVC 五、ASP.NET WEB API2。本書最大的特色是以面試問答的形式進行展開。通讀此書,會幫助你對ASP.NET MVC有更深層次的理解。
因爲我的技術水平和英文水平也是有限的,所以錯誤在所不免,但願你們多多留言指正。html

系列導航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
Asp.net mvc 知多少(四)
Asp.net mvc 知多少(五)
Asp.net mvc 知多少(六)
Asp.net mvc 知多少(七)jquery

本節主要講解MVC的基本概念

Q1. 什麼是MVC?
Ans. MVC是Model-View-Controller的簡稱。它是在1970年引入的軟件設計模式。MVC 模式強迫關注分離 — 域模型和控制器邏輯與UI是鬆耦合關係。從而使應用程序的維護和測試更加簡單容易。程序員


Q2. 解釋一下MVC設計模式?web

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.五、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交互應用程序。
非開源 開源

主要區別

相關文章
相關標籤/搜索