本文主要想談的內容有:
- 為什么要有架構?
- 三層架構是什么?
- MVC框架是什么?
- MVC框架和三層架構的關系?
- MVC框架的工作流程?
- SSM框架和三層架構的關系?
為什么要有架構?
這是為了滿足“低耦合,高內聚”,實現代碼的健壯性和可擴展性。比如為了更好的降低各層間的耦合度,在三層架構程序設計中,采用面向抽象編程。即上層對下層的調用,是通過接口實現的。而下層對上層的真正服務提供者,是下層接口的實現類。服務標准(接口)是相同的,服務提供者(實現類)可以更換。
三層架構是什么?
三層架構由用戶界面層/表示層(User Interface),業務邏輯層(Business Logic Layer)和數據訪問層(Data Acess Layer)構成。
其中每一層的作用為:
- 用戶界面層:負責與用戶進行交互。
- 業務邏輯層:主要是針對具體的問題的操作,也可以理解成對數據層的操作,對數據業務邏輯處理。
- 數據訪問層:主要是對非原始數據(數據庫或者文本文件等存放數據的形式)的操作層,也就是說是對數據庫,而不是對數據的操作,具體為業務邏輯層或用戶界面層提供數據服務。
- 舉個例子:
訪問一個網站。用戶需要經歷的過程有:在瀏覽器輸入 url,然后瀏覽器向 Server 發起一個 http 請求,Server 拿到這個 http 請求之后會根據相關的條件到數據庫查詢相關數據,然后把數據以特定的格式(網站是 html 格式)返回給瀏覽器,瀏覽器再根據特定數據渲染出相應頁面。那么:
- 對用戶來說,瀏覽器就是用戶界面層,它主要是與用戶交互的頁面,根據用戶的輸入與事件,處理並顯示返回的特定數據。
- 連接表示層與數據訪問層的就是業務邏輯層,這包括后端程序中模型設計、驗證、業務規則、各種計算等。
- Server 端必須要一個強大的數據庫來存儲所有用戶交互產生的數據,而對這些數據的處理,包括增、刪、改、查就屬於數據訪問層。
- 三層架構圖示:
MVC框架是什么?
MVC框架是由Model模型(JavaBean),View視圖(Jsp) 和 Controller控制器(Servlet)構成
其中每一部分的作用為:
- Model:承載數據,並對用戶提交請求進行計算的模塊。其分為兩類,一類稱為數據承載Bean,一類稱為業務處理Bean。所謂數據承載Bean是指實體類,專門承載業務數據的,如Student、User等。而業務處理Bean則是指Service或Dao對象,專門用於處理用戶提交請求的。
- View:為用戶提供使用界面,與用戶直接進行交互
- Controller:用於將用戶請求轉發給相應的Model進行處理,並將處理Model的計算結果向用戶提供相應響應。
- MVC圖示:
(圖片來源於公眾號兄弟會)
MVC框架和三層架構的關系?
- 三層架構是一種軟件領域最普遍的分層式架構,而 MVC 是在三層架構的基礎上設計的一種框架型架構,三層架構是一種宏觀的概念,而 MVC 就是一種比較具體的三層架構的框架實現,我們在 MVC 的基礎上把不同類別的代碼文件進行分類就可以了
- 一般認為View 層和 Controller 層都屬於三層架構的用戶界面層,而Model屬於業務邏輯層和數據訪問層
- 圖示:
(圖片來源於公眾號科幫網)
有的認為model只屬於業務邏輯層,理由如下:
人認為 Model 層除了定義業務需要的實體類與簡單的邏輯算法處理之外,還應該包括對數據庫的操作、對網絡等的操作等,這對后端開發來說沒問題,因為后端的數據全部來源於數據庫,而且后端可以很方便的跟數據服務器進行連接,而 Model 的業務邏輯大多都是來自對數據的處理,所以這種方式很正常。
但是對於客戶端來說差別就大了,我們知道客戶端的數據來源大多來自服務端的接口請求,但是很可能同時有本地數據庫、本地的文件都能提供數據,比如可能會有離線操作,比如可能為了用戶體驗,用戶斷網的時候會做緩存處理,也就是說客戶端的數據來源有多種多樣,而 Model 本身的主要職責應該定義業務需要的數據模型以及簡單的邏輯處理,如果同時也要處理本地數據庫與網絡數據未免變得臃腫起來,而且職責不清晰。
- 圖示:
- 總的來說:MVC與三層架構並不是一一對應的,MVC只是三層架構基礎上設計的具體框架
MVC框架的工作流程?
- 用戶通過View頁面向服務端提出請求,可以是表單請求、超鏈接請求、AJAX請求等。
- 服務端Controller控制器接收到請求后對請求進行解析,找到相應 的Model對用戶請求進行處理。
- Model處理后,將處理結果再交給Controller
- Controller在接到處理結果后,根據處理結果找到要作為向客戶端發回的響應View頁面。頁面經渲染(數據填充)后,再發送給客戶端
- 圖示:
SSM與三層架構關系?
SSM主要由Spring,SpringMVC 和 Mybatis三個構成。它們在三層架構中所處的位置是不同的,即它們在三層架構中的功能各不相同,各司其職
- SpringMVC:作為View層的實現者,完成用戶的請求接收功能。SpringMVC的Controller作為整個應用的控制器,完成用戶請求的轉發及對用戶的響應
- MyBatis:作為 Dao層的實現者,完成對數據庫的增、刪、改、查功能
- Spring:以整個應用大管家的身份出現。整個應用中所有的Bean的生命周期行為,均由Spring來管理。即整個應用中所有對象的創建、初始化、銷毀,及對象間關聯關系的維護,均由Spring進行管理
- 關系圖示: