我們平時總是將三層架構(gòu)與MVC混為一談布朦,殊不知它倆并不是一個概念煞烫。
首先,它倆根本不是一個概念猴鲫。
- 三層架構(gòu)是一個分層式的軟件體系架構(gòu)設(shè)計对人,它可適用于任何一個項目。
- MVC是一個設(shè)計模式拂共,它是根據(jù)項目的具體需求來決定是否適用于該項目牺弄。
- 那么架構(gòu)跟設(shè)計模式有什么區(qū)別呢?
-
我們從接手一個項目開始宜狐,首先势告,我們需要進行架構(gòu)設(shè)計,一般我們采用的就是分層式的架構(gòu)設(shè)計肌厨,即我們的三層架構(gòu)培慌。
然后,在確定了架構(gòu)以后柑爸,我們再根據(jù)項目的具體需求去考慮是否需要應(yīng)用一些設(shè)計模式吵护,比如是否應(yīng)用我們的MVC模式,抽象工廠模式等等。(在這里我們看出馅而,MVC與三層架構(gòu)不是一個等級的祥诽,而與抽象工廠等設(shè)計模式才是一路的)
最后,確定了模式以后瓮恭,就是我們的一些具體的實現(xiàn)了雄坪。(當(dāng)然一個項目不僅僅考慮這些問題,我只是為了說明兩者的區(qū)別屯蹦,將其他問題已省略)
其次维哈,它倆劃分的層次不同。
三層架構(gòu)將整個項目劃分為:表現(xiàn)層(UI)登澜、業(yè)務(wù)邏輯層(BLL)阔挠、數(shù)據(jù)訪問層(DAL)。
MVC 即Model(模型)脑蠕,View(視圖)购撼,Controller(控制)。
下面看一下他倆的區(qū)別與聯(lián)系:
通過這個圖我們可以知道谴仙,我們平常所說的V是UI迂求,C是BLL,M是DAL的觀點是錯誤的晃跺。
而我們通常所見到的MVC一般也都是在應(yīng)用三層架構(gòu)的基礎(chǔ)上揩局,即將Model層再進行分層。而如果Model不再進行劃分的話掀虎,那么使用MVC的意義也就不大了谐腰。
然后,它倆的目的著重點不同涩盾。
三層架構(gòu)的目的著重點是“高內(nèi)聚,低耦合”励背,即解耦春霍。
MVC的目的則是實現(xiàn)Web系統(tǒng)的職能分工,即職責(zé)劃分叶眉。
其實職責(zé)劃分也是解耦址儒,但是三層側(cè)重的是整體的一個解耦,而MVC側(cè)重的是web系統(tǒng)的解耦衅疙,即側(cè)重jsp和Servlet的一個解耦莲趣。
最后,為何我們會將其混為一談饱溢?
既然兩者有這么多的不同喧伞,我們?yōu)槭裁催€總是將其混淆呢,下面我列舉了幾個我們常常將其混為一談的幾個原因:
1.二者都是“三層”。
這個原因是最容易迷惑我們初學(xué)者的潘鲫,一個是UI,BLL,DAL翁逞,一個是View,Controller溉仑,Model挖函,不都是三層嗎?
雖然都是“三層”(不一定是真的三層浊竟,還可以是多層)怨喘,但是它們的劃分的不一樣。大家可從上面的圖中看出不同振定。
2.MVC總是伴隨著三層架構(gòu)必怜。
這個就是我在前面一再強調(diào)的,我們一般是在考慮使用(也可以不使用)了三層架構(gòu)的基礎(chǔ)上再根據(jù)具體需求決定是否需要使用MVC吩案,于是我們常說的MVC中總是伴隨著三層架構(gòu)棚赔,所以大家總是會認為MVC就是三層架構(gòu),三層架構(gòu)就是MVC徘郭,殊不知靠益,它們二者是一起出現(xiàn)的。
3.都是在分層残揉,即都是在解耦胧后。
前面說它們目的的時候也說了,雖然它們的側(cè)重點不同抱环,但是它們的總體目的是一樣的壳快,都是為了解耦,對于初學(xué)者而言镇草,是不知道這兩個側(cè)重點有何不同的眶痰。