官术网_书友最值得收藏!

1.3.3 經(jīng)典的MVC架構(gòu)模式

本書中MVC并不是重點(diǎn),但談到單體式架構(gòu),就不得不介紹MVC,早在1978年MVC的概念就被提出,可以說MVC的出現(xiàn)極大地延緩了單體式架構(gòu)的衰敗時(shí)間,它雖然不能從本質(zhì)上改變單體式架構(gòu)本身的缺陷,但在很大程度上確實(shí)改善了單體式架構(gòu)代碼混亂、難以維護(hù)的問題。

MVC將程序簡(jiǎn)單地劃分為3層。

(1)模型層:用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對(duì)數(shù)據(jù)的處理方法。模型有對(duì)數(shù)據(jù)直接訪問的權(quán)力,如對(duì)數(shù)據(jù)庫(kù)的訪問。模型不依賴視圖和控制器,即模型不關(guān)心它會(huì)被如何顯示或如何被操作。除此之外,模型還負(fù)責(zé)具體的業(yè)務(wù)邏輯和算法的編寫。

(2)視圖層:能夠?qū)崿F(xiàn)數(shù)據(jù)有目的的顯示,即將模型處理的數(shù)據(jù)通過圖形界面的形式進(jìn)行展示,在視圖中一般沒有程序上的邏輯。

(3)控制層:負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求或?qū)φ?qǐng)求的處理,起到不同層面之間的組織作用,用于控制應(yīng)用程序的流程、頁(yè)面的跳轉(zhuǎn)等。

MVC的各層之間保持相對(duì)的獨(dú)立,視圖不用關(guān)心用戶的請(qǐng)求和數(shù)據(jù)的存儲(chǔ),通過不同的控制器可以連接不同的模型和視圖來完成用戶的需求。多個(gè)視圖可以共用一個(gè)模型,它實(shí)現(xiàn)了一種動(dòng)態(tài)的程序設(shè)計(jì),使后續(xù)對(duì)程序的修改和擴(kuò)展簡(jiǎn)化,并且使程序某一部分的重復(fù)利用成為可能。

MVC各組件之間的具體協(xié)作如圖1.6所示。

圖1.6 MVC協(xié)作示意圖

由圖1.6可以看出,MVC可以讓單體式架構(gòu)的層次更加簡(jiǎn)單、清晰,代碼職責(zé)更加獨(dú)立,雖然不能改變單體式架構(gòu)本身的結(jié)構(gòu),但也大大提升了項(xiàng)目代碼的可維護(hù)性和可復(fù)用性。那么,為什么說MVC并不能改變單體式架構(gòu)本身的結(jié)構(gòu)呢?繼續(xù)回到圖1.5的例子來分析,如果采用MVC的模式,它又將變成什么樣子呢?單體式架構(gòu)MVC結(jié)構(gòu)如圖1.7所示。

圖1.7 單體式架構(gòu)MVC結(jié)構(gòu)

由圖1.7可以看出,與圖1.5相比,其架構(gòu)進(jìn)行了很大的優(yōu)化,先是根據(jù)業(yè)務(wù)的領(lǐng)域或一些邊界規(guī)則將代碼橫向拆分成各個(gè)模塊,然后每個(gè)模塊內(nèi)部通過MVC的方式進(jìn)行了縱向分層。但是,外部單體式的結(jié)構(gòu)并沒有改變,所有的代碼還在一個(gè)容器中運(yùn)行,所以在1.3.2節(jié)中所提到的單體式架構(gòu)的缺點(diǎn)還是存在的。MVC就像止疼藥,只能緩解這些問題,但隨著項(xiàng)目的逐漸發(fā)展,系統(tǒng)的不斷擴(kuò)大,這些問題還是會(huì)暴露出來。這時(shí),急需一種新的模式來從根本上解決這些問題,微服務(wù)架構(gòu)就是這種新的模式。

主站蜘蛛池模板: 浦东新区| 高雄市| 夹江县| 阿荣旗| 萍乡市| 连城县| 湛江市| 青神县| 德昌县| 什邡市| 凭祥市| 鲁山县| 连江县| 页游| 西和县| 广元市| 肥西县| 清镇市| 宜良县| 金阳县| 渝中区| 周口市| 新乐市| 台中县| 东海县| 贡觉县| 庐江县| 清镇市| 兴和县| 永修县| 贵定县| 博客| 旅游| 赣州市| 大新县| 海南省| 通渭县| 云林县| 津南区| 托克托县| 江北区|