MVC框架
介紹:
-
MVC全名Model View Controller
- Model:模型的意思,代表業務模型
- View:視圖的意思,代表用戶界面
- Controller:控制器的意思,控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。
-
MVC把各個層次需要關注的內容分離了開來。
- MVC將負責顯示數據的層次稱為視圖。View視圖主要負責向用戶顯示數據。它負責與用戶交互。
- 視圖負責與用戶進行交互,用戶可以在視圖中進行數據交互,視圖中接收到數據之后,控制器負責封裝數據,根據業務來調用不同的業務模型去處理;模型接受到控制器發來的數據后,處理業務。
例子闡述:
- 用戶在web頁面中輸入了賬戶和密碼來進行余額查詢操作(View)
- 視圖封裝數據傳遞給控制器,控制器識別出這是一個“查詢余額”的業務請求。(View->Controller)
- 控制器識別出這是一個“查詢余額”的業務請求之后,控制器繼續封裝數據,調用“查詢余額”的業務模型來處理(Controller->Model)
- 業務模型接受到控制器傳來的數據,進行數據庫交互,查出余額,返回結果給視圖(Model通常會把數據封裝到對象當中),視圖將業務模型返回過來的數據顯示出來。(Model->View)【這里有時候需要更改視圖的界面,比如你點擊查所有用戶,會跳轉到一個新視圖用來顯示用戶列表。這里的視圖改變依賴於視圖解析器 ,視圖解析器會根據結果來進行不同的視圖選擇,有時候這個結果是模型給的(動態頁面),有時候是控制器給的(靜態頁面)。】
注意:
- 視圖雖然是一個“交互界面”,但它很多時候都是基於對象模型來創建的,比如一個注冊界面,很多時候注冊頁面的文本框的name屬性都要與業務模型中的數據進行對應,這樣可以很輕易地將數據封裝起來。
三層結構:
介紹:
應用程序架構可以分為三個層次:表現層、業務層、持久層。
- 表現層:(頂層)表現層負責用戶界面的顯示,並且負責幫助用戶向業務層提交業務邏輯處理請求,通常還負責將業務層發來的處理結果顯示到界面中。
- 業務層:(中間層)業務層負責處理業務邏輯,它可以根據不同的業務來調用不同的代碼來處理。
- 持久層:(底層)持久層負責向一個或多個數據庫中讀取或寫入數據。通常用來給業務層的業務邏輯處理提供數據。這個層次通常必須包括業務實體模型。
例子闡述:
以一個例子來談三個層次的作用:
- 用戶訪問了某個網站的頁面,這個頁面上有各種各樣的功能(如果只是靜態的頁面的話,還不算表現層)
- 用戶點擊某個按鈕,向服務器提交請求(表現層->業務層)
- 服務器接收到請求,分析請求,調用對應的邏輯處理程序來處理請求(業務層)
- 如果用戶發起的業務請求是一個與數據庫相關的業務,對應的邏輯處理程序調用數據庫交互邏輯來讀取/寫入數據(業務層->持久層)
- 數據庫交互邏輯通過程序的配置信息來與數據庫進行交互,讀取/寫入數據后,返回結果。(持久層->業務層)【如果這個數據庫交互邏輯處於某個業務處理邏輯當中,那么這時候就不算持久層,每個層次的功能都是獨立的。】
- 業務邏輯處理程序接收到數據庫交互邏輯程序返回的數據,進行數據處理,然后返回到用戶的界面上。(業務層->表現層)
- 服務器根據請求將數據顯示到網頁中,然后將這個網頁返回給用戶瀏覽器。(表現層)
注意:
-
每個層次的職能應該是獨立的,否則無法獨立成一個層次。
-
通常來說,表現層不應該存在業務邏輯處理的代碼,它通常只用來顯示動態數據。
MVC與三層架構的區別
- MVC與三層架構並不等同,三層架構的三個層次並不與MVC對應
- 如果要MVC與三層架構做對比的話,MVC就像一個中間件,它囊括了三層架構中業務層的大部分功能,但也涉及表現層(View視圖負責數據的顯示)和持久層(持久層中的實體類與Model模型,但Model比實體類要多出數據庫交互的功能)
- MVC中Model基本相當於業務層+持久層