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

第1章 MVC原理

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

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

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

圖1-1

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

1.1.1 控制器層

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

控制器層的主要職責如下:

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

1.1.2 視圖層

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

視圖層的主要職責如下:

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

1.1.3 模型層

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

模型層的主要職責如下:

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

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

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

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

圖1-2

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

1.3 本章小結(jié)

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容