我理解的MVC模式和三層架構(gòu)的區(qū)別與聯(lián)系

mvc 與三層架構(gòu)

一、前言

對于初學(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)用程序的測試更加容易。

各模塊解析
  1. 各模塊定義

    • 模型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控制器)
  2. 各模塊聯(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>

各層解析
  1. 各層定義

    • 表現(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ù)訪問層就好比取出或放回這些積木的動作。
  2. 各層聯(lián)系


舉個搭積木的小栗子
流程:根據(jù)積木成型的圖紙(表現(xiàn)層),我們會設(shè)計該怎樣去搭建(業(yè)務(wù)邏輯層),然后就開始取積木(數(shù)據(jù)訪問層)進行搭建,當我們完成設(shè)計流程的時候,積木也就成型了。

項目開發(fā)流程
建議從最內(nèi)層開始設(shè)計并實現(xiàn)

四、兩者區(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è)計模式是軟件的知識。

框架模式有哪些?

MVC、MTV、MVP、CBD、ORM等等;

框架有哪些?

C++語言的QT、MFC、gtk,Java語言的SSH 、SSI,php語言的 smarty(MVC模式),python語言的django(MTV模式)等等

設(shè)計模式有哪些?

工廠模式、適配器模式、策略模式等等

簡而言之:框架是大智慧,用來對軟件設(shè)計進行分工;設(shè)計模式是小技巧,對具體問題提出解決方案,以提高代碼復(fù)用率,降低耦合度
上述引自百度百科

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 又看到有人在問三層架構(gòu)和MVC的關(guān)系,感覺這種問題有點教條化了。因為它們都在邏輯上將應(yīng)用程序劃為三塊,湊了一個數(shù)字...
    Ludiwgbet閱讀 2,052評論 1 12
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,141評論 2 59
  • KVO簡介: NSKeyValuesObserving(KVO)非正式協(xié)議定義了一種機制,允許一個對象被通知:另外...
    jackjhu閱讀 1,149評論 0 3
  • 2018年3月31日 周六 天氣晴 今天春光明媚,今天心情飛揚。今天帶著妹妹參加了哥哥的小記者活動――走進武警支隊...
    陽光明媚_bf41閱讀 207評論 1 5

友情鏈接更多精彩內(nèi)容