
一、前言
對于初學(xué)者來說,剛接觸這兩個概念,很有可能容易混淆,誤以為是一個東西的兩種叫法。但深入了解后會發(fā)現(xiàn),二者的構(gòu)建大有不同。所以,“混淆”未必就是一件壞事,當你從“混淆”中走出來時,往往會對二者有一個比較深刻的認知。
二、MVC
簡介
MVC 是 Model-View-Controller 的簡稱,即模型-視圖-控制器。它屬于設(shè)計模式的范疇,就如同其他設(shè)計模式一樣,模式的出現(xiàn)就是為了對某種功能的優(yōu)化,而MVC模式可以看做是對三層架構(gòu)中表現(xiàn)層的一種細分優(yōu)化。
MVC 分層有助于管理復(fù)雜的應(yīng)用程序,因為您可以在一個時間內(nèi)專門關(guān)注一個方面。例如,可以在不依賴業(yè)務(wù)邏輯的情況下專注于視圖設(shè)計。同時也讓應(yīng)用程序的測試更加容易。
各模塊解析
-
各模塊定義
-
模型(Model):應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分。通常模型對象負責在數(shù)據(jù)庫中存取數(shù)據(jù)。(javaBean) -
視圖(View):應(yīng)用程序中處理數(shù)據(jù)顯示的部分。通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。(頁面) -
控制器(Control):應(yīng)用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。(servlet控制器)
-
-
各模塊聯(lián)系
一般Controller在Model和View之間起到了溝通的作用,處理用戶在View上的輸入,并轉(zhuǎn)發(fā)給Model。這樣Model和View兩者之間可以做到松散耦合,甚至可以彼此不知道對方,而由Controller連接起這兩個部分。
三、三層架構(gòu)
簡介
三層架構(gòu)通常意義上的三層架構(gòu)就是將整個業(yè)務(wù)應(yīng)用劃分為:表現(xiàn)層(web層)、業(yè)務(wù)邏輯層(service層)、數(shù)據(jù)訪問層(持久化層)。區(qū)分層次的目的即為了“高內(nèi)聚、低耦合”的思想。在軟件體系架構(gòu)設(shè)計中,分層式結(jié)構(gòu)是最常見,也是最重要的一種結(jié)構(gòu)。微軟推薦的分層式結(jié)構(gòu)一般分為三層,從下至上分別為:數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層(又或稱為領(lǐng)域?qū)樱?、表示層?/p>
各層解析
-
各層定義
-
表現(xiàn)層(Web層):通俗說就是用戶所能看到的直觀的界面。其作用就是接收用戶提交的請求數(shù)據(jù),以及將程序?qū)τ脩粽埱笏a(chǎn)生的響應(yīng)數(shù)據(jù)反饋給用戶。目的就是為用戶提供可交互的操作界面。所以,表現(xiàn)層就像已經(jīng)搭好的積木。 -
業(yè)務(wù)邏輯層(service層):主要是針對具體的問題的操作,根據(jù)用戶的不同請求而做出不同響應(yīng)的處理。也可以理解成對數(shù)據(jù)層的操作,對數(shù)據(jù)業(yè)務(wù)邏輯處理,如果說數(shù)據(jù)層是積木,那邏輯層就是對這些積木的搭建。 -
數(shù)據(jù)訪問層(持久化):它只是提供對數(shù)據(jù)庫操作的多種途徑,是對數(shù)據(jù)庫的操作,而不是數(shù)據(jù)。不同的數(shù)據(jù)就好比形狀各異的積木,而數(shù)據(jù)訪問層就好比取出或放回這些積木的動作。
-
-
各層聯(lián)系
舉個搭積木的小栗子
流程:根據(jù)積木成型的圖紙(表現(xiàn)層),我們會設(shè)計該怎樣去搭建(業(yè)務(wù)邏輯層),然后就開始取積木(數(shù)據(jù)訪問層)進行搭建,當我們完成設(shè)計流程的時候,積木也就成型了。
項目開發(fā)流程

四、兩者區(qū)別
MVC(模型Model-視圖View-控制器Controller)是一種架構(gòu)模式,可以用它來創(chuàng)建在域?qū)ο蠛蚒I表示層對象之間的區(qū)分。
同樣是架構(gòu)級別的,相同的地方在于他們都有一個表現(xiàn)層,但是他們不同的地方在于其他的兩個層。
在三層架構(gòu)中沒有定義Controller的概念。這是最不同的地方。而MVC也沒有把業(yè)務(wù)的邏輯訪問(model)看成兩個層(業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層),這是采用三層架構(gòu)或MVC搭建程序最主要的區(qū)別。當然了。在三層中也提到了Model,但是三層架構(gòu)中Model的概念與MVC中Model的概念是不一樣的, “三層”中典型的Model層是由業(yè)務(wù)邏輯與訪問數(shù)據(jù)組成的。而MVC里,則是以實體類構(gòu)成的。
上述引自百度百科
五、框架和設(shè)計模式的區(qū)別
有很多程序員往往把框架模式和設(shè)計模式混淆,認為MVC是一種設(shè)計模式。實際上它們完全是不同的概念。
框架、設(shè)計模式這兩個概念總?cè)菀妆换煜鋵嵥鼈冎g還是有區(qū)別的。框架通常是代碼重用,而設(shè)計模式是設(shè)計重用,架構(gòu)則介于兩者之間,部分代碼重用,部分設(shè)計重用,有時分析也可重用。在軟件生產(chǎn)中有三種級別的重用:內(nèi)部重用,即在同一應(yīng)用中能公共使用的抽象塊;代碼重用,即將通用模塊組合成庫或工具集,以便在多個應(yīng)用和領(lǐng)域都能使用;應(yīng)用框架的重用,即為專用領(lǐng)域提供通用的或現(xiàn)成的基礎(chǔ)結(jié)構(gòu),以獲得最高級別的重用性。
框架與設(shè)計模式雖然相似,但卻有著根本的不同。設(shè)計模式是對在某種環(huán)境中反復(fù)出現(xiàn)的問題以及解決該問題的方案的描述,它比框架更抽象;框架可以用代碼表示,也能直接執(zhí)行或復(fù)用,而對模式而言只有實例才能用代碼表示;設(shè)計模式是比框架更小的元素,一個框架中往往含有一個或多個設(shè)計模式,框架總是針對某一特定應(yīng)用領(lǐng)域,但同一模式卻可適用于各種應(yīng)用??梢哉f,框架是軟件,而設(shè)計模式是軟件的知識。
框架模式有哪些?
框架有哪些?
C++語言的QT、MFC、gtk,Java語言的SSH 、SSI,php語言的 smarty(MVC模式),python語言的django(MTV模式)等等
設(shè)計模式有哪些?
工廠模式、適配器模式、策略模式等等
簡而言之:框架是大智慧,用來對軟件設(shè)計進行分工;設(shè)計模式是小技巧,對具體問題提出解決方案,以提高代碼復(fù)用率,降低耦合度。
上述引自百度百科

