MVC簡介與三層架構
感謝部落格園團隊日夜辛苦的付出
感謝閱讀我文章的每位讀者
1. MVC簡介
MVC最早於1978年提出,是軟體工程中的一種軟體架構模式,這時距離微軟在1985年推出Window1.0還有7年之久,當時的MVC即所有的輸入、輸出、邏輯控制,這些都要由軟體開發者完全實現。
MVC模式可以有兩種理解:一種是表現模式,另外一種是架構模式。這裡先將其理解為表現模式。
MC是模型(Model),檢視(View)和控制(Controller)的縮寫,其目的是實現Web系統的職能分工。其中,Model層實現系統中的業務邏輯(可以先理解為Model層存放的資料是和資料庫有關的,後面會講);View層用於與使用者互動(可以先理解為我們所說的網頁,後面會講),通常用Razor和APSX來實現;Controller層是Model與View之前溝通的橋樑,可以分派使用者的請求並選擇恰當的檢視來用於顯示,同時還可以解釋使用者的輸入並將它們對映為模型層可執行的操作(可以這樣理解:當你View層的網頁和使用者互動的時候需要對資料進行增刪改查、需要響應使用者的時候View層的網頁把這些需要處理的資訊傳送到Controller層來進行處理,而處理方式需要你在Controller層裡面寫處理類了,後面會講),如圖1-1所示。
圖1-1
(1)控制器(Controller)
接收使用者輸入,並完成模型、檢視的呼叫。Controller 處理使用者互動,從Model中獲取資料並將資料傳給指定的View。
(2)檢視(View)
View是使用者介面層元件,主要是將Model中的資料暫時給使用者。cshtml、ASPX和ASCX檔案提供處理檢視的職責。
(3)模型(Model)
Model主要是儲存或者是處理資料的元件,實現業務邏輯層對實體類相應資料庫的操作(增刪改查),包括資料、驗證規則、資料訪問和業務邏輯等應用程式資訊。Model具有兩方面的含義:DomainModel和ViewModel。
•領域模型 DomainModel:不僅僅是一個實體類,而是整個業務處理流程的一個規則,是實現業務邏輯層對實體類的相應操作,包括邏輯操作與資料庫操作,如驗證規則、資料訪問和業務邏輯等應用程式資訊。
•檢視模型 ViewModel:是與顯示頁面強關聯的模型物件,用於實現頁面強型別,如做了連線查詢得到的結果要顯示到前臺,就沒有相應的物件存在,這時就可以新建一個類來包括結果集中的行。
此外需要注意的是,Model是獨立的元件,並不知道View的存在,也不知道Controller的存在
過去MVC模式並不適合小型甚至中等規模的應用程式,因為這樣會帶來額外的工作量,增加應用的複雜性。現在多數軟體設計框架(如ASP.NET MVC)都能直接快速提供MVC骨架(例如:visual studio),供中小型應用程式開發,此問題不再存在。在VS下點選檔案 =>新建=>專案=>選擇ASP.NET Web應用程式(.NET Framework)=>選擇MVC,請看圖1-2。
圖1-2
這個時候visual studio 會自動給我們生成MVC的基架,如圖1-3所示。
圖1-3
對於存在大量使用者介面並且邏輯複雜的大型應用程式,MVC將會使軟體在健壯性、程式碼重用和結構方面上一個新的臺階。儘管在最初構建MVC框架時會花費一定的工作量,但是從長遠的角度來看它會大大提高後期軟體開發的效率。
2.三層架構
當把MVC當成一種架構模式來理解,就是所謂的三層架構。如圖2-1所示。
圖2-1
三層模式是軟體工程中的程式設計模式,是MVC設計思想的一種實現。隨著技術的發展,現在基本上已經將MVC模式等同於三層模式,包括資料訪問層、業務邏輯層、表示層。再細一點可以分為UI層、業務邏輯層、資料訪問層、模型層。如果要嚴格區分,那麼UI層是指View與Controller,業務邏輯層、資料訪問層、模型層都被包括在Model中。三層之前有著非常強的依賴關係:表示層 <- 業務邏輯層 <- 資料訪問層。而且它們之間的資料傳遞是雙向的,並且通常藉助實體類傳遞資料。
1.各層的作用
(1)資料訪問層:主要是對原始資料(資料庫或者文字檔案等存放資料的形式)的操作層,而不是指原始資料,也就是說,是對資料的操作,而不是資料庫,具體為業務邏輯層或表示層提供資料訪問。
(2)業務邏輯層:主要是針對具體問題的操作,也可以理解成對資料層的操作,對資料業務邏輯處理,如果說資料層是積木,那麼邏輯層就是對這些積木的搭建。
(3)表示層:主要是表示Web方式,也可以表示成WinForms方式。Web方式也可以表示成aspx,如果邏輯層相當強大和完善,那麼無論表示層如何定義和更改,邏輯層都能完善地提供服務。
2.具體的區分方式
(1)資料訪問層:主要看資料層裡面有沒有包含邏輯處理,實際上它的各個函式主要完成對資料檔案的操作,而不必管其他操作。
(2)業務邏輯層:主要負責對資料層的操作,也就是說把一些資料層的操作進行組合。
(3)表示層:主要接收使用者的請求以及資料的返回,為客戶端提供應用程式的訪問。
使用三層架構的好處是:專案結構更清楚,分工更明確,有利於後期的維護和升級。雖然它會帶來一定的效能損失(因為當子程式模組未執行結束時主程式模組只能處於等待狀態,說明將應用程式劃分層次會帶來執行速度上的一些損失),但是從團隊開發效率角度上來講卻可以感受到大不相同的效果。