咱們平時老是將三層架構與MVC混爲一談,卻不知它倆並非一個概念。下面我來爲你們揭曉我所知道的一些真相。web
三層架構是一個分層式的軟件體系架構設計,它可適用於任何一個項目。設計模式
MVC是一個設計模式,它是根據項目的具體需求來決定是否適用於該項目。架構
那麼架構跟設計模式有什麼區別呢?jsp
咱們從接手一個項目開始,首先,咱們須要進行架構設計,通常咱們採用的就是分層式的架構設計,即咱們的三層架構。spa
而後,在肯定了架構之後,咱們再根據項目的具體需求去考慮是否須要應用一些設計模式,好比是否應用咱們的MVC模式,抽象工廠模式等等。(在這裏咱們看出,MVC與三層架構不是一個等級的,而與抽象工廠等設計模式纔是一路的)架構設計
最後,肯定了模式之後,就是咱們的一些具體的實現了。(固然一個項目不只僅考慮這些問題,我只是爲了說明二者的區別,將其餘問題已省略)設計
三層架構將整個項目劃分爲:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。基礎
MVC 即Model(模型),View(視圖),Controller(控制)。軟件
下面看一下他倆的區別與聯繫:im
經過這個圖咱們能夠知道,咱們日常所說的V是UI,C是BLL,M是DAL的觀點是錯誤的。
而咱們一般所見到的MVC通常也都是在應用三層架構的基礎上,即將Model層再進行分層。而若是Model再也不進行劃分的話,那麼使用MVC的意義也就不大了。
三層架構的目的着重點是「高內聚,低耦合」,即解耦。
MVC的目的則是實現Web系統的職能分工,即職責劃分。
其實職責劃分也是解耦,可是三層側重的是總體的一個解耦,而MVC側重的是web系統的解耦,即側重jsp和Servlet的一個解耦。
既然二者有這麼多的不一樣,咱們爲何還老是將其混淆呢,下面我列舉了幾個咱們經常將其混爲一談的幾個緣由:
1.兩者都是「三層」。
這個緣由是最容易迷惑咱們初學者的,一個是UI,BLL,DAL,一個是View,Controller,Model,不都是三層嗎?
雖然都是「三層」(不必定是真的三層,還能夠是多層),可是它們的劃分的不同。你們可從上面的圖中看出不一樣。
2.MVC老是伴隨着三層架構。
這個就是我在前面一再強調的,咱們通常是在考慮使用(也能夠不使用)了三層架構的基礎上再根據具體需求決定是否須要使用MVC,因而咱們常說的MVC中老是伴隨着三層架構,因此你們老是會認爲MVC就是三層架構,三層架構就是MVC,卻不知,它們兩者是一塊兒出現的。
3.都是在分層,即都是在解耦。
前面說它們目的的時候也說了,雖然它們的側重點不一樣,可是它們的整體目的是同樣的,都是爲了解耦,對於初學者而言,是不知道這兩個側重點有何不一樣的。
你們每每對它們的聯繫知道不少,否則也不會混爲一談,可是對它們的區別卻知道較少,但願我上面講解的它們二者之間的區別可讓你們對它們有些瞭解,若有寫的不妥的地方,請指教。