標籤:mvc 架構 架構 三層
一、什麼是MVC 1、概念
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種商務邏輯、資料、介面顯示分離的方法組織代碼,將商務邏輯聚集到一個組件裡面,在改進和個人化定製介面及使用者互動的同時,不需要重新編寫商務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化使用者介面的結構中。
小編點睛:MVC就是類似三層的一種架構,主要還是採用封裝(分層)的思想,來降低耦合度,從而使我們的系統更加的靈活,擴充性更好。
2、內容
Model(模型)是應用程式中用於處理應用程式資料邏輯的部分。通常模型對象負責在資料庫中存取資料。
View(視圖)是應用程式中處理資料顯示的部分。通常視圖是依據模型資料建立的。
Controller(控制器)是應用程式中處理使用者互動的部分。通常控制器負責從視圖讀取資料,控制使用者輸入,並向模型發送資料
小編點睛:
3、優點 (1)首先,最重要的一點是多個視圖能共用一個模型。同一個模型可以被不同的視圖重用,大大提高了代碼的可重用性。
(2)由於MVC的三個模組相互獨立,改變其中一個不會影響其他兩個,所以依據這種設計思想能構造良好的松耦合的構件。
(3)此外,控制器提高了應用程式的靈活性和可配置性。控制器可以用來聯結不同的模型和視圖去完成使用者的需求,這樣控制器可以為構造應用程式提供強有力的手段。
4、缺點
(1)增加了系統結構和實現的複雜性。
對於簡單的介面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的複雜性,並可能產生過多的更新操作,降低運行效率。
(2)視圖與控制器間的過於緊密的串連。
視圖與控制器是相互分離,但確實聯絡緊密的組件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。
(3)視圖對模型資料的低效率訪問。
依據模型操作介面的不同,視圖可能需要多次調用才能獲得足夠的顯示資料。對未變化資料的不必要的頻繁訪問,也將損害操作效能。
(4) 目前,一般進階的介面工具或構造器不支援MVC架構。
改造這些工具以適應MVC需要和建立分離的組件的代價是很高的,從而造成使用MVC的困難
小編點睛:根據MVC的優缺點,我們知道,每個東西都有自己適用的範圍。
對於開發存在大量使用者介面,並且商務邏輯複雜的大型應用程式,MVC將會使你的軟體在健壯性、代碼重用和結構方面上一個新的台階。儘管在最初構建MVC架構時會花費一定的工作量,但從長遠角度看,它會大大提高後期軟體開發的效率。
所以我們在具體適用時,要綜合考慮其適用範圍,
二、工作原理 1、web工作原理圖
小編點睛:這張圖描述的是webform的處理方式,它通過url請求伺服器,訪問index_aspx類的Page_Load()方法,然後根據其邏輯結構返回結果
小編點睛:這張圖描述的是MVC的處理方式,兩者明顯不同,首先要訪問的url地址就不一樣,它表示news對象的index方法,所以首先根據路由配置訪問該方法,然後根據商務邏輯得出結果,最後調用index.cshtml視圖來顯示結果
2、內部工作原理圖
小編點睛:上邊這張圖是MVC的處理過程:首先控制器接收使用者的請求,並決定應該調用哪個模型來進行處理。然後模型根據使用者請求進行相應的商務邏輯處理,並返回資料。最後控制器調用相應的視圖格式化模型返回的資料,並通過視圖呈現給使用者。
3、小例子 (1)先在model層寫一個Dog實體類
public class Dog { public int ID { get; set; } public string Name { get; set; } public override string ToString() { return "ID=" + this.ID +",Name=" + this.Name ; } }
(2)先在controller層寫相應的代碼
//控制器類(繼承了Controller) public class HomeController : Controller { #region 0.1初始化資料集合 void IntData() /// <summary> /// 初始化資料集合 /// </summary> public List<Models.Dog> IntData() { List<Models.Dog> list =new List<Models.Dog >() { new Dog(){ ID=1,Name ="小樣~~" }, new Dog(){ ID=2,Name ="小樣2~~" }, new Dog(){ ID=3,Name ="小樣3~~" }, new Dog(){ ID=4,Name ="小樣4~~" }, }; return list; } #endregion // GET: /Home/ /// <summary> /// Action方法(可堪稱MVC設計模式的Model /// </summary> /// <returns></returns> public ActionResult Index() { System.Text.StringBuilder sbHtml = new System.Text.StringBuilder(4000); //2.1處理當前業務(比如讀取資料庫。判斷等) //2.1.1建立一個資料集合(偽資料,並獲得資料 List<Models.Dog> list = IntData(); //2.1.2遍曆集合,產生HTNL代碼,存入builder list.ForEach (d => { sbHtml.Append("<div>" + d.ToString() + "</div>"); }); //2.2使用viewBag傳輸資料給同名Index.cshtml 視圖 //viewBag是一個dynamic類型集合,可以動態添加任意類型的任意名稱的屬性和值 ViewBag.HtmlStr = sbHtml.ToString(); return View(); } }
(3)最後在view層顯示資料
@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport" content ="width=device-width" /> <title>Index</title></head><body> <!-- 相當於把Action中的內容,存放在此處 輸出!--> @Html.Raw(ViewBag.HtmlStr)</body></html>
(4)運行
三、架構VS設計模式
1、架構通常是代碼重用,而設計模式是設計重用,架構則介於兩者之間,部分代碼重用,部分設計重用,有時分析也可重用。
在軟體生產中有三種層級的重用:內部重用,即在同一應用中能公用使用的抽象塊;代碼重用,即將通用模組組合成庫或工具集,以便在多個應用和領域都能使用;應用程式框架的重用,即為專用領域提供通用的或現成的基礎結構,以獲得最進階別的重用性。
2、設計模式是對在某種環境中反覆出現的問題以及解決該問題的方案的描述,它比架構更抽象。架構可以用代碼錶示,也能直接執行或複用,而對模式而言只有執行個體才能用代碼錶示。
設計模式是比架構更小的元素。一個架構中往往含有一個或多個設計模式,架構總是針對某一特定應用領域,但同一模式卻可適用於各種應用。
可以說,架構是軟體,而設計模式是軟體的知識。
3、簡而言之:架構是大智慧,用來對軟體設計進行分工;設計模式是小技巧,對具體問題提出解決方案,以提高代碼複用率,降低耦合度。
小編總結:通過MVC的學習,我們要知道它是用來分割頁面和資料庫訪問的架構,降低了兩者的耦合度,同時通過Controller的控制,也使系統更加的靈活,使我們的代碼更健壯,複用性更強,但是凡事都有他適用的範圍,我們不能覺得它好,就不敢三七二十一的瞎用,有時可能會適得其反,因此MVC的學習還需要我們以後慢慢探討。
淺談MVC架構—你到底有什麼本事