Asp.net mvc 知多少(一)

来源:http://www.cnblogs.com/sheng-jie/archive/2017/01/17/6291915.html
-Advertisement-
Play Games

本系列主要翻譯自《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設計模式?

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.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扮演三層架構中的展現層。
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交互應用程式。
非開源 開源

主要區別



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系統window8.1 1、安裝IIS組件:點開始菜單—選擇控制面板——程式——打開或關閉WINDOWS功能——展開Internet信息服務,勾選FTP伺服器(包括FTP服務和FTP擴展性),點確定。 由於我的電腦已將安裝了IIS服務所以找不到了,不知道你電腦有沒有安裝可以在 控制面板\所有控制面板 ...
  • 運行級別 說明 0 系統關機狀態 1 單用戶工作狀態,用於root對系統進行維護,此時不予許其他用戶使用主機。(類似於windows 的安全模式) 2 多用戶狀態(沒有NFS) 3 多用戶狀態(有NFS),主機做為伺服器常在該模式下工作 4 系統未定義 5 多用戶狀態,並且在系統啟動後運行xwind ...
  • 我這裡要講的並不是IPC中的消息隊列,我要講的是在進程內部實現自定義的消息隊列,讓各個線程的消息來推動整個進程的運動。進程間的消息隊列用於進程與進程之間的通信,而我將要實現的進程內的消息隊列是用於有序妥當處理來自於各個線程請求,避免一窩蜂的請求而導致消息的異常丟失。想想socket編程里的liste ...
  • Linux系統下給非root用戶添加sudo許可權 有時,在linux系統中非root用戶運行sudo命令,會提示類似信息: xxx is not in the sudoers file. This incident will be reported. 這裡,xxx是當前用戶名,該用戶無法執行sudo ...
  • 鏈接: top:命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表. 該命令可以按CPU使用.記憶體使用和執行時間對任務進行排序; 而且該命令的很多特性都可以通過互動式命令或者在個人定製文件中進行設定. top - 01:06:48 up 1:22, 1 user, lo ...
  • 1 平臺匯流排的簡介 平臺匯流排是一種虛擬的匯流排,相應的設備則為platform_device,而驅動則為platform_driver。匯流排將設備和驅動綁定,在系統每註冊一個設備的時候,會尋找與之匹配的驅動;相反的,在系統每註冊一個驅動的時候,會尋找與之匹配的設備,而匹配由匯流排完成。 我們可以把一個驅 ...
  • 作者:楓雪庭 出處:http://www.cnblogs.com/FengXueTing-px/ 歡迎轉載 前言 雖然Emacs已經可以完成大部分的編輯操作,但有時候為了方便也會用到vim。所以記錄了vim的簡單操作,只要求到達上手即可。 本文簡單記錄了,vim編輯器模式之間的轉換和複製粘貼操作。 ...
  • 之前我們做的按鍵驅動程式都是應用程式主動open設備/dev/buttons而現實情況不能來打開這個設備甚至不知道這個設備的存在。 解決方案:變成通用的驅動程式。接下來我們引入的輸入子系統可以完成該任務。 1.輸入子系統的簡介 1.1 引入輸入子系統的好處: (1)統一了物理形態各異的相似的輸入設備 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...