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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...