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。本書最大的特點(diǎn)是以面試問答的形式進(jìn)行展開。通讀此書,會(huì)幫助你對ASP.NET MVC有更深層次的理解。
由于個(gè)人技術(shù)水平和英文水平也是有限的,因此錯(cuò)誤在所難免,希望大家多多留言指正。
系列導(dǎo)航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
Asp.net mvc 知多少(四)
Asp.net mvc 知多少(五)
Asp.net mvc 知多少(六)
Asp.net mvc 知多少(七)
本節(jié)主要講解MVC的基本概念
Q1. 什么是MVC?
Ans. MVC是Model-View-Controller的簡稱。它是在1970年引入的軟件設(shè)計(jì)模式。MVC 模式強(qiáng)迫關(guān)注分離 — 域模型和控制器邏輯與UI是松耦合關(guān)系。從而使應(yīng)用程序的維護(hù)和測試更加簡單容易。
Q2. 解釋一下MVC設(shè)計(jì)模式?
Ans. MVC 設(shè)計(jì)模式將應(yīng)用程序分解成3個(gè)主要部分: Model, View, Controller(模型、視圖、控制器)
Model - 模型代表一系列類用來描述業(yè)務(wù)邏輯,比如業(yè)務(wù)模型以及數(shù)據(jù)訪問操作,再比如數(shù)據(jù)模型。同時(shí)也定義了對數(shù)據(jù)如何進(jìn)行處理的業(yè)務(wù)規(guī)則。
View - 視圖代表的是UI部分,像CSS、jquery、html等。它主要的職責(zé)是展現(xiàn)從controller接受到數(shù)據(jù)或模型。
Controller - 控制器職責(zé)在于處理傳入的請求。它接受用戶通過視圖的輸入,然后對用戶輸入的數(shù)據(jù)模型進(jìn)行處理,最終通過視圖將結(jié)果渲染給用戶。通常來講,控制器在視圖和模型之間扮演著橋梁(協(xié)調(diào)者)的角色。
Q3. 什么是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)開發(fā)?
Ans. Domain-Driven Design (DDD)定義了一系列的準(zhǔn)則和模式從而時(shí)開發(fā)者針對不同的領(lǐng)域采取合適的設(shè)計(jì)方案以開發(fā)出優(yōu)美的系統(tǒng)。DDD既不是一項(xiàng)技術(shù)也不是一套方法論。DDD主要由Entity, Value Object, Aggregate, Service, Repository五大部分組成。
Entity(實(shí)體):具有唯一標(biāo)志的對象,比如用戶。
Value Object(值對象):不具有唯一標(biāo)志的對象,比如枚舉。一個(gè)值對象也可以是一個(gè)實(shí)體視情況而定。
Aggregate(聚合): 它通過定義對象之間清晰的所屬關(guān)系和邊界來實(shí)現(xiàn)領(lǐng)域模型的內(nèi)聚,并避免了錯(cuò)綜復(fù)雜的難以維護(hù)的對象關(guān)系網(wǎng)的形成。聚合定義了一組具有內(nèi)聚關(guān)系的相關(guān)對象的集合,我們把聚合看作是一個(gè)修改數(shù)據(jù)的單元。領(lǐng)域模型:聚合、聚合根詳解。
Service(服務(wù)):服務(wù)是在應(yīng)用程序中用來處理業(yè)務(wù)邏輯的。
Repository(倉儲(chǔ)):倉儲(chǔ)的作用是數(shù)據(jù)的存儲(chǔ)讀取,即封裝數(shù)據(jù)持久化框架。它不關(guān)心使用何種數(shù)據(jù)庫。倉儲(chǔ)也不是我們常說的Data Access Layer(數(shù)據(jù)操作層),但是為了安全因素,倉儲(chǔ)會(huì)引用一個(gè)位置進(jìn)行存儲(chǔ)。倉儲(chǔ)的主要職責(zé)是處理聚合的和持久化相關(guān)的任務(wù)(ADD、UPDATE、DELETE、GET)。
MSDN關(guān)于DDD的介紹
Q4. 解釋一下MVP模式?
Ans. MVP與MVC相似,只是將MVC的Controller替換成Presenter。MVP模式將應(yīng)用程序分解成3個(gè)主要部分: Model, View, Presenter。
Model - 模型代表一系列類用來描述業(yè)務(wù)邏輯,比如業(yè)務(wù)模型以及數(shù)據(jù)訪問操作,再比如數(shù)據(jù)模型。同時(shí)也定義了對數(shù)據(jù)如何進(jìn)行處理的業(yè)務(wù)規(guī)則。
View - 視圖代表的是UI部分,像CSS、jquery、html等。它主要的職責(zé)是展現(xiàn)從controller接受到數(shù)據(jù)或模型。
Presenter - 職責(zé)在于處理視圖上的UI行為事件。通過View接收用戶輸入,然后通過Model處理用戶數(shù)據(jù),然后將結(jié)果傳回view。不想View和Controller,View和Presenter之間完全解耦,是通過接口進(jìn)行交互。同時(shí)它也不處理和接收傳入的請求。
MVP模式通常用在Asp.net Web Form、Windows Form 應(yīng)用程序
MVP模式的關(guān)鍵點(diǎn):
用戶與View直接交互.
View與Presenter是1對1關(guān)系,一個(gè)View對應(yīng)一個(gè)Presenter
View 與 Model 不發(fā)生聯(lián)系,都通過 Presenter 傳遞。
各部分之間的通信,都是雙向的。
View 非常薄,不部署任何業(yè)務(wù)邏輯,稱為"被動(dòng)視圖"(Passive View),即沒有任何主動(dòng)性,而 Presenter非常厚,所有邏輯都部署在那里。
Q5. 解釋一下MVVM 模式?
Ans. MVVM 是指 Model-View-View Model. MVVM支持在View與ViewModel之間進(jìn)行雙向數(shù)據(jù)綁定。通過視圖模型的狀態(tài)就能夠自動(dòng)的傳播改動(dòng)到View。通常來說,ViewModel是通過觀察者模式將ViewModel的改動(dòng)通知到View。
Model - 模型代表一系列類用來描述業(yè)務(wù)邏輯,比如業(yè)務(wù)模型以及數(shù)據(jù)訪問操作,再比如數(shù)據(jù)模型。同時(shí)也定義了對數(shù)據(jù)如何進(jìn)行處理的業(yè)務(wù)規(guī)則。
View - 視圖代表的是UI部分,像CSS、jquery、html等。它主要的職責(zé)是展現(xiàn)從controller接受到數(shù)據(jù)或模型。
View Model - ViewModel 的職責(zé)是暴露方法、命令以及屬性去維護(hù)View的狀態(tài),操縱Model 作為View執(zhí)行的結(jié)果,以及觸發(fā)View上自身的事件。
MVVM模式的關(guān)鍵點(diǎn):
用戶與View直接交互。
View與ViewModel是1對多關(guān)系,一個(gè)View可以對應(yīng)多個(gè)ViewModel。
View保存一個(gè)對ViewModel的引用,但是ViewModel對于View一無所知。
View和ViewModel之間的數(shù)據(jù)綁定是雙向的。
Angular就是使用這種模式。
Q6. 什么是 ASP.NET MVC?
Ans. ASP.NET MVC 是一套基于Microsoft .NET Framework的用來開發(fā)web應(yīng)用程序的開源框架。它確保了代碼的干凈整潔且關(guān)注分離. ASP.NET MVC framework 具有很好的擴(kuò)展性以及支持自定義。
Q7. MVC模式在ASP.NET下是如何工作的?
Ans. 我們按照Model、View、Controller的順序來一一解釋:
The Model in ASP.NET MVC
ASP.NET MVC 中的Model可以分解成幾個(gè)不同的層:
Objects or ViewModel or Presentation Layer - 這一層包含的簡單對象或復(fù)雜的對象用來進(jìn)行特定的強(qiáng)類型View的展示。這些對象用來從Controller傳遞數(shù)據(jù)到強(qiáng)類型的View,反之亦然。這些對象對應(yīng)的類通過數(shù)據(jù)注解指定定的驗(yàn)證規(guī)則。通常來說,這些類擁有你想要展示到對應(yīng)View/Page的屬性。
Business Layer - 主要用來實(shí)現(xiàn)業(yè)務(wù)邏輯和數(shù)據(jù)驗(yàn)證。同時(shí)通過數(shù)據(jù)訪問層(DAL)將數(shù)據(jù)持久化到數(shù)據(jù)庫。這一層被Controller直接調(diào)用去處理用戶輸入并將結(jié)果返回到View
Data Access Layer - 提供對象去訪問和操作數(shù)據(jù)庫。通常來說,這一層主要使用一些ORM框架比如EF、NHibernate。
The View in ASP.NET MVC
View就是展示從Controller傳遞的數(shù)據(jù)。同時(shí)肩負(fù)著將Model進(jìn)行轉(zhuǎn)換以在View的UI上進(jìn)行展示。
The Controller in ASP.NET MVC
響應(yīng)Http請求并根據(jù)傳入的請求內(nèi)容決定由哪個(gè)具體的Action去處理。它通過View接收用戶輸入,然后通過Model的幫助去處理用戶數(shù)據(jù)并將結(jié)果返回給View.
Q9. ASP.NET MVC相對于Web Forms的優(yōu)勢有哪些?
Ans. 主要有以下幾點(diǎn)優(yōu)勢:
Separation of concern(關(guān)注分離) - MVC設(shè)計(jì)模式將Asp.net MVC 應(yīng)用程序分成三個(gè)部分,View、Controller、Model。更容易的去處理程序的復(fù)雜性問題。
TDD(測試驅(qū)動(dòng)開發(fā))- 更好的支持測試驅(qū)動(dòng)開發(fā)。
Extensible and pluggable (擴(kuò)展性好)- MVC支持可插拔、可擴(kuò)展。因此更容易進(jìn)行替換和自定義。
Full control over application behaviour (對應(yīng)用程序的完全控制)- MVC 不使用View State,且不依賴于Server。促使程序員可以更好的控制應(yīng)用的行為同時(shí)減少對Server請求的帶寬。
ASP.NET features are supported (強(qiáng)大Asp.net 功能支持)- MVC 框架是基于Asp.net 設(shè)計(jì)的,因此可以使用Asp.ent包含大部分功能,比如認(rèn)證、授權(quán),權(quán)限和角色控制、緩存、Session等。
URL routing mechanism (路由機(jī)制)- MVC 框架提供了一個(gè)強(qiáng)大的Url路由機(jī)制,以便我們構(gòu)建易理解易搜索的URLS。這個(gè)路由機(jī)制提高了應(yīng)用程序的可訪問性,同時(shí)利于搜索引擎優(yōu)化。
Q10. 簡要介紹下ASP.NET MVC的版本更新?
Ans. 以下是ASP.NET MVC的主要版本及版本特性:
ASP.NET MVC1
2009-3-13 發(fā)布
基于 .NET 3.5、Visual Studio 2008 、Visual Studio 2008 SP1運(yùn)行
基于WebForm引擎的MVC模式架構(gòu)
Html Helpers
Ajax helpers
Routing
Unit Testing
ASP.NET MVC2
2010-3-10發(fā)布
基于 .NET 3.5, 4.0,Visual Studio 2008 & 2010運(yùn)行
基于lambda表達(dá)式強(qiáng)類型的HTML幫助器方法
Templated Helpers(模板幫助器)
UI helpers 支持自動(dòng)腳手架功能及自定義模板
支持DataAnnotations屬性注解以支持客戶端服務(wù)端雙重?cái)?shù)據(jù)驗(yàn)證
重載了HTTP謂詞 GET, PUT, POST, and DELETE
Areas
異步控制器
ASP.NET MVC3
2011-1-13發(fā)布
基于 .NET 4.0 、Visual Studio 2010運(yùn)行
Razor view engine
加強(qiáng)了數(shù)據(jù)驗(yàn)證
Remote Validation(遠(yuǎn)程驗(yàn)證)
Compare Attribute(比較屬性)
Session less Controller
Child Action Output Caching
Dependency Resolver(依賴注入)
支持 Entity Framework Code First
Partial-page output caching
添加了ViewBag動(dòng)態(tài)屬性以支持Controller與View間的數(shù)據(jù)傳遞
Global Action Filters
更好的Javascript支持: 非侵入式JavaScript, jQuery 驗(yàn)證, JSON 綁定
使用 NuGet 平臺(tái)去交付和管理依賴
ASP.NET MVC4
2012-8-15發(fā)布
基于.NET 4.0, 4.5 、Visual Studio 2010SP1 & Visual Studio 2012運(yùn)行
ASP.NET WEB API
對默認(rèn)的項(xiàng)目模板進(jìn)行更新和加強(qiáng)
提供了基于Jquery Mobile的移動(dòng)項(xiàng)目模板
Display Models
Task support for Asynchronous Controllers
Bundling and minification(捆綁和微小)
支持 Windows Azure SDK
ASP.NET MVC5
2013-10-17發(fā)布
基于 .NET 4.5, 4.5.1& Visual Studio 2012 & Visual Studio 2013運(yùn)行
One ASP.NET
ASP.NET Identity
ASP.NET Scaffolding
Authentication filters(身份驗(yàn)證過濾器 - ASP.NET MVC管道中的授權(quán)過濾器之前運(yùn)行)
引入了Bootstrap
ASP.NET WEB API2
Q11. 三層架構(gòu)與MVC架構(gòu)的區(qū)別在哪?
Ans. 三層架構(gòu)是一個(gè)線性的架構(gòu),主要包括:展現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層。用戶直接與展現(xiàn)層交互。
MVC架構(gòu)是一個(gè)三角形架構(gòu),將應(yīng)用程序分成三個(gè)部分,Model、View、Controller。用戶在View的幫助下與Controller交互。
MVC不會(huì)替換掉三層架構(gòu);往往三層架構(gòu)與MVC是一起使用的,MVC扮演三層架構(gòu)中的展現(xiàn)層。
Q12. ASP.NET WebForm 與 ASP.NET MVC的區(qū)別是什么?
Ans. 主要的區(qū)別詳細(xì)見下表:
| 事件驅(qū)動(dòng)開發(fā)模型 | 輕量級(jí)的基于MVC模型的開發(fā)模型 |
| 服務(wù)端控件 | Html Helper |
| 狀態(tài)管理技術(shù)(View State、Session) | 沒有自動(dòng)的狀態(tài)管理 |
| 基于文件路徑的路由 | 基于路由的Urls |
| 遵循WebFrom語義 | 遵循Razor引擎語義 |
| View與業(yè)務(wù)邏輯緊耦合(.aspx,.aspx.cs) | View與業(yè)務(wù)邏輯分離 |
| 通過Master Page(母板頁)進(jìn)行統(tǒng)一布局 | 使用Layout 統(tǒng)一布局 |
| 通過User Controls 進(jìn)行重用 | 通過Partial View進(jìn)行重用 |
| 有內(nèi)置的數(shù)據(jù)控件,操作數(shù)據(jù)比較方便 | 輕量級(jí)的,提供全面的控制標(biāo)記和支持許多功能,允許快速和敏捷發(fā)展。因此,它是最好的用最新的Web標(biāo)準(zhǔn)開發(fā)Web交互應(yīng)用程序。 |
| 非開源 | 開源 |
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的Asp.net mvc 知多少(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MASM6.11安装
- 下一篇: C++类库:OTL通用的数据库连接类库