在開頭我要感謝簡述的一位作者,他的文章終於讓我清楚了MVC和三層架構的區別,用博客記錄一下,希望對你們也有幫助
剛接觸這兩個概念,很有可能容易混淆(你如果不混淆那我只能說你比我強太多了~),誤以爲是一個東西的兩種叫法。但深入瞭解後會發現,二者的構建大有不同。所以,“混淆”未必就是一件壞事,當你從“混淆”中走出來時,往往會對二者有一個比較深刻的認知。
一張圖讓我們把這兩個看的清清楚楚
一、傳統設計(現在幾乎不再使用):
Jsp + javaBean,
JavaBean用來對應數據庫中的表,jsp負責顯示界面、接受請求、處理業務、訪問數據庫。
弊端: 業務多時,導致jsp頁面容易混亂,開發效率低
二、MVC
簡介
MVC 是 Model-View-Controller 的簡稱,即模型-視圖-控制器。它屬於設計模式的範疇,就如同其他設計模式一樣,模式的出現就是爲了對某種功能的優化,而MVC模式可以看做是對三層架構中表現層的一種細分優化。
MVC 分層有助於管理複雜的應用程序,因爲您可以在一個時間內專門關注一個方面。例如,可以在不依賴業務邏輯的情況下專注於視圖設計。同時也讓應用程序的測試更加容易。
各模塊解析
模型
(Model):應用程序中用於處理應用程序數據邏輯的部分。通常模型對象負責在數據庫中存取數據。(javaBean)視圖
(View):應用程序中處理數據顯示的部分。通常視圖是依據模型數據創建的。(頁面)控制器
(Control):應用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。(servlet控制器)
各模塊聯繫
一般Controller在Model和View之間起到了溝通的作用,處理用戶在View上的輸入,並轉發給Model。這樣Model和View兩者之間可以做到鬆散耦合,甚至可以彼此不知道對方,而由Controller連接起這兩個部分。
三、三層架構
簡介
三層架構通常意義上的三層架構就是將整個業務應用劃分爲:表現層(web層)、業務邏輯層(service層)、數據訪問層(持久化層)。區分層次的目的即爲了“高內聚、低耦合”的思想。在軟件體系架構設計中,分層式結構是最常見,也是最重要的一種結構。微軟推薦的分層式結構一般分爲三層,從下至上分別爲:數據訪問層、業務邏輯層(又或稱爲領域層)、表示層。
各層解析
表現層
(Web層):通俗說就是用戶所能看到的直觀的界面。其作用就是接收用戶提交的請求數據,以及將程序對用戶請求所產生的響應數據反饋給用戶。目的就是爲用戶提供可交互的操作界面。所以,表現層就像已經搭好的積木。業務邏輯層
(service層):主要是針對具體的問題的操作,根據用戶的不同請求而做出不同響應的處理。也可以理解成對數據層的操作,對數據業務邏輯處理,如果說數據層是積木,那邏輯層就是對這些積木的搭建。數據訪問層
(持久化):它只是提供對數據庫操作的多種途徑,是對數據庫的操作,而不是數據。不同的數據就好比形狀各異的積木,而數據訪問層就好比取出或放回這些積木的動作。
各層聯繫
舉個搭積木的小栗子
流程:根據積木成型的圖紙(表現層),我們會設計該怎樣去搭建(業務邏輯層),然後就開始取積木(數據訪問層)進行搭建,當我們完成設計流程的時候,積木也就成型了。
四、兩者區別
MVC(模型Model-視圖View-控制器Controller)是一種架構模式,可以用它來創建在域對象和UI表示層對象之間的區分。
同樣是架構級別的,相同的地方在於他們都有一個表現層,但是他們不同的地方在於其他的兩個層。
在三層架構中沒有定義Controller的概念。這是最不同的地方。而MVC也沒有把業務的邏輯訪問(model)看成兩個層(業務邏輯層、數據訪問層),這是採用三層架構或MVC搭建程序最主要的區別。當然了。在三層中也提到了Model,但是三層架構中Model的概念與MVC中Model的概念是不一樣的, “三層”中典型的Model層是由業務邏輯與訪問數據組成的。而MVC裏,則是以實體類構成的。
上述引自百度百科
五、框架和設計模式的區別
有很多程序員往往把框架模式和設計模式混淆,認爲MVC是一種設計模式。實際上它們完全是不同的概念。
框架、設計模式這兩個概念總容易被混淆,其實它們之間還是有區別的。框架通常是代碼重用,而設計模式是設計重用,架構則介於兩者之間,部分代碼重用,部分設計重用,有時分析也可重用。在軟件生產中有三種級別的重用:內部重用,即在同一應用中能公共使用的抽象塊;代碼重用,即將通用模塊組合成庫或工具集,以便在多個應用和領域都能使用;應用框架的重用,即爲專用領域提供通用的或現成的基礎結構,以獲得最高級別的重用性。
框架與設計模式雖然相似,但卻有着根本的不同。設計模式是對在某種環境中反覆出現的問題以及解決該問題的方案的描述,它比框架更抽象;框架可以用代碼表示,也能直接執行或複用,而對模式而言只有實例才能用代碼表示;設計模式是比框架更小的元素,一個框架中往往含有一個或多個設計模式,框架總是針對某一特定應用領域,但同一模式卻可適用於各種應用。可以說,框架是軟件,而設計模式是軟件的知識。
框架模式有哪些?
框架有哪些?
C++語言的QT、MFC、gtk,Java語言的SSH 、SSI,php語言的 smarty(MVC模式),python語言的django(MTV模式)等等
設計模式有哪些?
工廠模式、適配器模式、策略模式等等
簡而言之:框架是大智慧,用來對軟件設計進行分工;設計模式是小技巧,對具體問題提出解決方案,以提高代碼複用率,降低耦合度。