軟件架構設計:B/S層次架構之MVC/MVP/MVVM
層次架構風格從之前的兩層C/S到三層C/S,然后演化為三層B/S架構,三層B/S架構之后仍然在往后面演化,我們來看一下層次架構演化過程中都有了哪些演化的架構風格呢?
而我們先簡單了解一下之前的層次架構風格中分層的各個層次的作用。
- 表現層:由于用戶進行交互,比如MVC,MVP,MVVM其實都是與用戶頁面打交道的一層
- 中間層:比如我們的接口層或者業務邏輯層,一般主要用于處理業務邏輯,比如我們的service層
- 數據訪問層:ORM(對象關系映射),比如說平常的hibernate或mybatis.就是把一個個對象和關系表的數據通過映射關系綁定起來,讓我們把數據庫操作映射到這個對象的操作上來。。
- 數據架構層(其實就是數據庫)
1、MVC架構風格
MVC分別是什么?
- Model(模型):是應用程序中用于處理應用程序數據邏輯的部分。通常模型對象負責在數據庫中存取數據。
- View(視圖):是應用程序中 處理數據顯示的部分,通常視圖是依據模型數據創建的。
- Controller(控制器):是應用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數據,控制用戶輸入,并向模型發送數據。
在J2EE體系中對應關系為:
- Model(模型):Entity Bean, Session Bean
- View(視圖):JSP
- Controller(控制器):Servlet
在SpringBoot體系中
- Model(模型):也就是我們的Entity
- View(視圖):模板頁面,如果是JSON數據表示省去了View這個層次,返回JSON數據交給前端自己處理數據并渲染即可
- Controller(控制器):Controller,其實本質上還是Servlet
主動MVC和被動MVC
細節其實不需要我們去了解,但是有主動型和被動型需要我們了解。
動作解讀(了解MVC直接如何交互)
- 1、客戶做出某種動作,比如點擊某個按鈕,View接收到這個動作
- 2、然后把這個動作傳遞給Controller層級
- 3、然后把這個動作繼續傳遞給Model,Model來處理數據的業務邏輯。
- 5、處理完畢之后,把數據的更改反饋給View層
- 6、View層再將這個修改再頁面上渲染,從而反饋給客戶
- 4、視圖可以直接和模型進行交互,直接操作模型獲取數據的操作,因此這和操作對于標準層次風格來說,這就是跨層次的對接了,所以這個耦合對比較高。
MVC中存在的問題就是視圖可以直接操作模型,從而導致跨層級滴哦安永,而MVP的提出,正是解決這個跨層級的問題的。它是MVC的一直變種。
2、MVP架構風格
什么是MVP?
- MVP是MVC的變種
- MVP實現了View和Model之間的解耦(View不直接使用Model,修改View不會影響Model)
- MVP更好的支持單元測試, 因為邏輯在P中,可以脫離View來測試邏輯,可以將一個P用于多個V,而不需要修改P的邏輯。
- MVP中V要處理界面事件,業務邏輯在P中,MVC中界面事件交由C處理。
其實現在我們前后端分離之后,如果在不使用數據雙向綁定的基礎上,就是典型的MVP架構風格,如果使用了數據雙向綁定,那么就是MVVM架構風格了。
3、MVVM架構風格
MVVM跟MVP的操作思想其實沒有一些本質性的區別了,只是多實現了一個雙向數據綁定技術。
4、富互聯網應用(RIA)
- RIA結合了C/S架構反應速度快、交互性強的有點,以及B/S架構傳播范圍廣以及容易傳播的特性。
- RIA簡化并改進B/S架構的用戶交互
- 數據能夠被緩存在客戶端,從而可以實現一個比基于HTML的響應速度更快且數據往返與服務器的次數更少的用戶界面。
其實簡單來說,就是我們在打開頁面時,將一些常用的數據加載到本地,然后減少與服務器的交互次數,從而提升訪問速度。
主要應用于那種頁面動畫較多的,比游戲類的小程序,一般都會這樣做,比如先加載資源,然后初始化配置,再加載某某場景數據等。就是為了后面直接訪問本地更快些。
5、小結
主要說明的層次架構中表現層的架構演化,后面還有SOA,微服務等架構風格,我們慢慢了解,學無止境,加油!