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。本書最大的特點是以面試問答的形式進行展開。通讀此書,會幫助你對ASP.NET MVC有更深層次的理解。
由于個人技術水平和英文水平也是有限的,因此錯誤在所難免,希望大家多多留言指正。

系列導航
Asp.net mvc 知多少(一)
Asp.net mvc 知多少(二)
Asp.net mvc 知多少(三)
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 FormsMVC
事件驅動開發模型輕量級的基于MVC模型的開發模型
服務端控件Html Helper
狀態管理技術(View State、Session)沒有自動的狀態管理
基于文件路徑的路由基于路由的Urls
遵循WebFrom語義遵循Razor引擎語義
View與業務邏輯緊耦合(.aspx,.aspx.cs)View與業務邏輯分離
通過Master Page(母板頁)進行統一布局使用Layout 統一布局
通過User Controls 進行重用通過Partial View進行重用
有內置的數據控件,操作數據比較方便輕量級的,提供全面的控制標記和支持許多功能,允許快速和敏捷發展。因此,它是最好的用最新的Web標準開發Web交互應用程序。
非開源開源

主要區別

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282844.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282844.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282844.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

stm32h7能跑linux,STM32H7榨干了Cortex-M7的最后一滴血

原標題:STM32H7榨干了Cortex-M7的最后一滴血有個非常重磅的消息ST給自己的STM32家族又新增了一條新的產品線—— H7H 代表的是High Pefrmance之意 (此為筆者臆測)7 則表示這是基于ARM Cortex-M7架構修改而來熟悉的工程師可能會問,不是已經有基于M7架構的…

通過PowerShell進行網絡分析

好久沒有寫文章,因為確實工作也比較忙。今天周末,稍微有些時間,在解決一個問題時,用到了一點抓取和處理網絡數據的小技巧,摘錄分享如下。問題描述我有一個需求,就是要研究某個網頁加載過程中具體發起了多少…

jvm監控調優常用命令

jvm監控調優常用命令 轉載于:https://www.cnblogs.com/likun10579/p/6403324.html

【BZOJ】1013 球形空間產生器

【解析】代數變形高斯消元 [分析] 依據題目以下的提示。設x[i][j]表示第i個點在第j維的坐標。r[j]為圓心在第j維的坐標 能夠知道: dis根號(∑(x[i][j]-r[j])^2)。 因為平方的非負性。所以能夠推出 dis^2∑(x[i][j]-r[j])^2。 依據平方和公式,(x[i][j]-r[…

c語言不規則窗口,C語言不規則數組和指針

不規則數組是每一行的列數不一樣的二維數組,其原理如下圖所示,圖中的數組有3行,每行有不同的列數。在了解如何創建不規則數組之前,讓我們先看一下用復合字面量創建的二維數組。復合字面量是一種C構造,前面看起來像類型…

php spl_autoload_register() 函數

spl_autoload_register()的用法: 其中$this表示當前類,autoload()是我注冊的自動加載函數,當然這個只是一個函數名,只要不與php的關鍵字重復,符合一般函數名的命名規范即可。 使用自動加載之后,當我們在一個…

C語言中遞歸什么時候能夠省略return引發的思考:通過內聯匯編解讀C語言函數return的本質...

C語言中遞歸什么時候能夠省略return引發的思考:通過內聯匯編解讀C語言函數return的本質 事情的經過是這種,博主在用C寫一個簡單的業務時使用遞歸,因為粗心而忘了寫return。結果發現返回的結果依舊是正確的。經過半小時的反匯編調試。證明了我…

C# 為什么說CM+Fody+HC是WPF開發的最強組合?

01—名詞解析CM:Caliburn.Micro(簡稱CM)一經推出便備受推崇,作為一款MVVM開發模式的經典框架,越來越多的受到wpf開發者的青睞.我們看一下官方的描述:Caliburn是一個為Xaml平臺設計的小型但功能強大的框架。Micro實現了各種UI模式&…

c語言邏輯運算符兩側運算對象,邏輯運算符兩側運算對象的數據類型是什么?...

邏輯運算符兩側運算對象的數據類型:可以是任何合法的類型數據;因為邏輯運算符兩邊的運算對象,最終都被轉換成bool值(邏輯值)操作。0、null轉換為false,而所有非零、非false、非null值轉換為true;然后進行運算。邏輯運算…

python-list:列表-元組-字符串

列表 “列表”是一個值,它包含多個字構成的序列。術語“列表值”指的是列表本身(它作為一個值,可以保存在變量中、傳遞給函數)--:按下標取值、切片、for循環、用于len()以及in not in等 list [aa,bb,cc,dd]是一個簡單的…

創建相似對象,就交給『工廠模式』吧

源碼&#xff1a; 源代碼C# 系列導航&#xff1a; 目錄 定義&#xff08;Factory Pattern&#xff09;&#xff1a; 用來創建目標對象的類&#xff0c;將相似對象的創建工作統一到一個類來完成。 一、簡單工廠模式&#xff1a; 代碼&#xff1a; /// <summary>/// 產品枚…

《ASP.NET Core 6框架揭秘》實例演示[26]:跟蹤應用接收的每一次請求

很多人可能對ASP.NET Core框架自身記錄的診斷日志并不關心&#xff0c;其實這些日志對糾錯排錯和性能監控提供了很有用的信息。如果需要創建一個APM&#xff08;Application Performance Management&#xff09;系統來監控ASP.NET Core應用處理請求的性能及出現的異常&#xff…

C語言循環為1404的循環,考試,求大神幫忙,C語言,小弟感激不盡

若有定義語句&#xff1a;int a10; double b3.14;&#xff0c;則表達式Aab值的類型是___________。  (1)A).char B)int C) double D)float(2)若有定義語句&#xff1a;int x12,y8,z;&#xff0c;在其后執行語句z0.9x/y;&#xff0c;則z的值為___________。A)1.9 B)1 C)2 D)2.…

js題集19

1.實現斐波那契數列。達到題目中的效果。不知道斐波那契數列是啥的請自行百度。 function fibonacci(){ } var ffibonacci(); for(var i0;i<10;i){ console.log(f()); } //output:按順序輸出斐波那契數列的數字。 eg&#xff1a; 1 2 3 5 8 13 21 34 55 89轉載于:https://ww…

阿里云Maven鏡像配置

2019獨角獸企業重金招聘Python工程師標準>>> <mirror><id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> …

c語言中有12個球,數學老師做不出來的一道邏輯推理題

同志們 那個球不一定輕啊正確的是平分三份 取兩分稱if(平)。。。。。。在未稱過的4球中取兩個放左邊 和標準的球稱(稱過的球一定標準)。。。。。。if(平)。。。。。。。。。。。。在兩次都未稱過的球中取一個 和標準的稱。。。。。。。。。。。。if(平)。。。。。。。。。。。。…

WPF 實現彈幕效果

WPF 實現彈幕效果控件名&#xff1a;BarrageExample作者&#xff1a;WPFDevelopersOrg原文鏈接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;項目使用 MIT 開源許可協議&#xff1b;此篇代碼目的只…

js題集23

1.實現函數--defaultArguments 功能如下&#xff1a; function add(a,b) { return ab;}; var add_ defaultArguments(add,{b:9}); add_(10); // returns 19 add_(10,7); // returns 17 add_(); // returns NaN add_ defaultArguments(add_,{b:3, a:2}); add_(10); // returns…

iteritems()與items()

iteritems&#xff1a;以迭代器對象返回字典鍵值對 item:以列表形式返回字典鍵值對 >>> dic {a:3,c:1,b:2} >>> print dic.iteritems() <dictionary-itemiterator object at 0x7fa381599628> >>> print dic.items() [(a, 3), (c, 1), (b, 2)…

WPF效果第一百九十八篇之模塊對比

前面效果中分享了彩色馬蹄圖的效果和范圍內拖拽;這不大假期的時間反正沒啥事就在家擼代碼;今天又是LisBox實現的效果,看最終效果:1、剛開始一朋友說用DataGrid來實現.首先把行對象轉換成列對象,至于控制列的話,就后臺重新賦值對象來控制前臺.我是覺得太費勁直接放棄了;還是首選…