SSM源碼解密-第1章 MVC原理

第1章 MVC原理

這里首先介紹經(jīng)典的MVC體系結(jié)構(gòu),通過對(duì)比MVC體系結(jié)構(gòu)和Web MVC體系結(jié)構(gòu)的區(qū)別,來深入理解Web MVC的背景、由來和特點(diǎn)。

1.1 MVC體系結(jié)構(gòu)

首先,我們來學(xué)習(xí)MVC的體系結(jié)構(gòu)。MVC是軟件工程中的一種軟件設(shè)計(jì)模式,也稱為前端控制器模式,它把軟件系統(tǒng)分為三個(gè)基本部分:模型,視圖和控制器,如圖1?1所示。

圖1-1

MVC體系結(jié)構(gòu)是一種靈活可擴(kuò)展的的程序設(shè)計(jì)模式,使后續(xù)對(duì)程序的修改和擴(kuò)展變得很容易,并且使程序某一部分的重復(fù)利用成為可能。除此之外,此模式通過對(duì)復(fù)雜的業(yè)務(wù)實(shí)現(xiàn)進(jìn)行簡化,使程序結(jié)構(gòu)更加直觀。應(yīng)用了MVC體系架構(gòu),對(duì)程序的各個(gè)基本功能進(jìn)行分類,是程序的各個(gè)功能模塊之間進(jìn)行解耦,各個(gè)功能獨(dú)立擁有各自的職責(zé),顧名思義,MVC將程序分成3個(gè)層次,這包括:模型(Model)層、視圖(View)層和控制器(Controller)層。

1.1.1 控制器層

控制器層起到對(duì)不同層面間的組織作用,用于控制應(yīng)用程序的流程。它處理用戶操作的事件并作出響應(yīng)。響應(yīng)包括更新數(shù)據(jù)模型和選擇視圖并展示數(shù)據(jù)模型。

控制器層的主要職責(zé)如下:

  • 控制應(yīng)用程序行為和流程
  • 映射用戶動(dòng)作到模型的數(shù)據(jù)變更
  • 選擇相應(yīng)的視圖并展示數(shù)據(jù)模型

1.1.2 視圖層

在視圖層中,一般沒有程序上的邏輯實(shí)現(xiàn),只需實(shí)現(xiàn)模型數(shù)據(jù)以一定的形式給用戶進(jìn)行展示。為了實(shí)現(xiàn)視圖層的刷新功能,視圖層需要訪問后備的數(shù)據(jù)模型,視圖層訪問模型的時(shí)候,可以采用拉去數(shù)據(jù)的方式,但是這種方式的時(shí)效性并不好,因此,視圖層可以預(yù)先在模型中進(jìn)行注冊(cè),這樣模型層有狀態(tài)變更的時(shí)候,就會(huì)通知視圖層做出相應(yīng)的展示上的改變。

視圖層的主要職責(zé)如下:

  • 解釋數(shù)據(jù)模型,并以一定的形式展示給用戶
  • 接受模型的變更通知,并改變對(duì)用戶的展示
  • 發(fā)送用戶操作給控制器

1.1.3 模型層

模型層封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對(duì)數(shù)據(jù)的處理方法。模型層有對(duì)數(shù)據(jù)直接訪問的權(quán)力,例如對(duì)數(shù)據(jù)庫的訪問。模型層不依賴視圖層和控制器層,也就是說,模型層不關(guān)心它會(huì)被如何顯示或是如何被操作。但是,模型層中數(shù)據(jù)的變化一般會(huì)通過一種刷新機(jī)制響應(yīng)在視圖層中。為了實(shí)現(xiàn)這種機(jī)制,那些用于監(jiān)視此模型層的視圖層必須事先在此模型上注冊(cè),從而,視圖可以即使響應(yīng)在數(shù)據(jù)模型上發(fā)生的改變,并根據(jù)此改變對(duì)用戶的展示做出變更。

模型層的主要職責(zé)如下:

  • 封裝應(yīng)用程序狀態(tài)
  • 提供應(yīng)用程序邏輯處理功能
  • 進(jìn)行狀態(tài)查詢和響應(yīng)狀態(tài)改變
  • 通知視圖數(shù)據(jù)和狀態(tài)的變更事件

本節(jié)介紹了MVC體系結(jié)構(gòu)的組件以及組件的職責(zé),MVC的各個(gè)組件是協(xié)同工作,而又互相獨(dú)立,這樣最大程度上實(shí)現(xiàn)了組件的重用性和可擴(kuò)展性。相應(yīng)于Web MVC體系結(jié)構(gòu),MVC體系結(jié)構(gòu)是經(jīng)典的設(shè)計(jì)模式,主要應(yīng)用在傳統(tǒng)的C/S體系架構(gòu)中。下面的小節(jié),我們介紹應(yīng)用更加廣泛的Web MVC體系結(jié)構(gòu)。

1.2 Web MVC體系結(jié)構(gòu)

隨著B/S體系結(jié)構(gòu)的應(yīng)用程序的流行和快速發(fā)展,MVC體系結(jié)構(gòu)思想被應(yīng)用到Web應(yīng)用程序設(shè)計(jì)。Web應(yīng)用程序大多是基于HTTP協(xié)議的,而HTTP協(xié)議的最大特點(diǎn)就是無連接和無狀態(tài)的。對(duì)于一個(gè)Web的瘦客戶端程序,每次和服務(wù)器的通信都是通過一次完整的HTTP請(qǐng)求和響應(yīng)來完成的。我們無法實(shí)現(xiàn)C/S應(yīng)用程序中實(shí)現(xiàn)的在視圖層注冊(cè)監(jiān)聽器來監(jiān)聽模型層改變的通知。取而代之的是視圖每次需要主動(dòng)的查詢用戶數(shù)據(jù)改變,這是MVC的一個(gè)演變,我們成為Web MVC,如圖1?2所示。

圖1-2

我們能看出,唯一不同的就是模型層不再通知視圖層是否發(fā)生了狀態(tài)改變,而是要求視圖層主動(dòng)的去查詢模型層的變更。如果模型的數(shù)據(jù)或者狀態(tài)改變,控制器則會(huì)選擇一個(gè)新的視圖來展示模型的變更數(shù)據(jù)。通過MVC在Web應(yīng)用程序的應(yīng)用,使Web應(yīng)用程序同樣可以有層的概念并且有較好的體系結(jié)構(gòu),易于維護(hù)和容易擴(kuò)展。

1.3 本章小結(jié)

本章簡單的介紹了MVC的體系結(jié)構(gòu)和工作原理,并介紹Web MVC與經(jīng)典MVC的區(qū)別,通過對(duì)比MVC和Web MVC來深入理解Web MVC的由來和使用場(chǎng)景。由于MVC與Web MVC同根同源,只是應(yīng)用的場(chǎng)景不同,本書后續(xù)不再對(duì)MVC和Web MVC進(jìn)行區(qū)分。

下一章,我們將從整體架構(gòu)上分析Spring是如何實(shí)現(xiàn)Web MVC體系結(jié)構(gòu)的。

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

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

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