(一)什麼是MVC?
MVC是Model-View-Controller的簡稱。它是在1970年引入的軟件設計模式。MVC 模式強迫關注分離 — 域模型和控制器邏輯與UI是鬆耦合關係。從而使應用程序的維護和測試更加簡單容易。html
(二) 解釋一下MVC設計模式?jquery
MVC 設計模式將應用程序分解成3個主要部分: Model, View, Controller(模型、視圖、控制器)程序員
Model - 模型表明一系列類用來描述業務邏輯,好比業務模型以及數據訪問操做,再好比數據模型。同時也定義了對數據如何進行處理的業務規則。web
View - 視圖表明的是UI部分,像CSS、jquery、html等。它主要的職責是展示從controller接受到數據或模型。數據庫
Controller - 控制器職責在於處理傳入的請求。它接受用戶經過視圖的輸入,而後對用戶輸入的數據模型進行處理,最終經過視圖將結果渲染給用戶。一般來說,控制器在視圖和模型之間扮演着橋樑(協調者)的角色。設計模式
(三) 什麼是領域驅動設計開發?
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)。瀏覽器
(四)解釋一下MVP模式?緩存
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很是厚,全部邏輯都部署在那裏。
(五)解釋一下MVVM 模式?
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就是使用這種模式。
(六) 什麼是 ASP.NET MVC?
Ans. ASP.NET MVC 是一套基於Microsoft .NET Framework的用來開發web應用程序的開源框架。它確保了代碼的乾淨整潔且關注分離. ASP.NET MVC framework 具備很好的擴展性以及支持自定義。
(七)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.
(八)ASP.NET MVC相對於Web Forms的優點有哪些?
主要有如下幾點優點:
(九)三層架構與MVC架構的區別在哪?
三層架構是一個線性的架構,主要包括:展示層、業務邏輯層、數據訪問層。用戶直接與展示層交互。
MVC架構是一個三角形架構,將應用程序分紅三個部分,Model、View、Controller。用戶在View的幫助下與Controller交互。
MVC不會替換掉三層架構;每每三層架構與MVC是一塊兒使用的,MVC扮演三層架構中的展示層。
(十)ASP.NET WebForm 與 ASP.NET MVC的區別是什麼?
主要的區別詳細見下表:
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交互應用程序。 |
非開源 | 開源 |
1.一、MVC概念
視圖(View)
表明用戶交互界面,對於Web應用來講,能夠歸納爲HTML界面,但有可能爲XHTML、XML和Applet。
模型(Model)
表示用戶對其數據的操做的一個封轉。能夠分爲視圖模型(view model)和領域模型(domain models),視圖模型就是在視圖與控制器之間傳輸數據的一個封轉,而領域模型就是業務邏輯,後臺數據模型等的一個集合。是咱們學的3層中的BLL,DAL,Models的集合
控制器(Controller)
控制器能夠理解爲從用戶接收請求,將模型與視圖匹配在一塊兒,共同完成用戶的請求。
1.二、ASP.NET MVC 原理
當在瀏覽器中輸入一個URL,進入了Route系統,路由系統獲得URL各個片斷的值,並交給MVC處理,MVC依據URL的信息知道請求的Action,接着就對模型進行一系列的處理,而後呈現視圖。
MVC對控制器與View有必定的限制,但對模型沒有任何的限制。
控制器必須實現IController接口或者繼承Controller類,控制器類中的公有方法稱之爲Action Method。
1.三、MVC項目結構及含義
1.四、MVC命名習慣
在MVC項目中有2種習慣
a、建議你如何組織項目中的一些文件,好比js文件放在Scripts文件夾下,像這種習慣,你徹底能夠不遵循,這些文件夾和文件刪除並不影響MVC框架自己。
b、另一種,有個專門的術語:」Convention over configuration」,意思就是說若是你遵循了這個習慣就不須要進行額外的配置或編碼(特別是控制器與視圖)。這種習慣就儘可能遵循,若是違反,在MVC中就須要作許多的事情。
主要有3個方面:
a、控制器命名習慣:控制器類必須以Controller結尾,但引用這個控制器的時候能夠省略掉Controller,若是想改變這種行爲,須要本身實現IControllerFactory接口,默認是經過DefaultControllerFactory來執行這個控制器的查找的。
b、視圖命名習慣:視圖或者分部視圖應該放在/Views/Controllername文件夾下面,好比一個控制器爲Demo 那麼這個控制器的全部視圖應該放在/Views/Demo/下面,默認狀況下,每個Action Method對應一個視圖,盡
量讓視圖名字與Action名字同樣,這樣在Action中就能夠直接return View();而放在Shared文件夾下面的視圖全部的控制器均可以使用
c、佈局命名習慣:佈局文件都如下劃線開頭,並放置在shared文件夾下面,在MVC 3中默認每一個視圖都會用到_layout.cshtml佈局,能夠在_viewstart.cshtml看到這個設置
1.五、ASP.NET MVC優缺點
優勢:
A、具備多個視圖對應一個模型的能力。
B、因爲一個應用被分離爲三層,所以有時改變其中的一層就能知足應用的改變。一個應用的業務流程或者業務規則的改變只需改動MVC的模型層。
C、它還有利於軟件工程化管理。因爲不一樣的層各司其職,每一層不一樣的應用具備某些相同的特徵,有利於經過工程化、工具化產生管理程序代碼。
缺點:
A、增長了系統結構和實現的複雜性。
B、視圖與控制器間的過於緊密的鏈接。
C、視圖對模型數據的低效率訪問。