1. 程式人生 > >MVC與前後端分離

MVC與前後端分離

1、MVC

MVC是一種經典的設計模式,Model-View-Controller,即模型-檢視-控制器。M主要負責資料與模型,V主要負責顯示,C主要負責互動與業務。

1) 模型是用於封裝資料的載體,其本質是一個普通的Java Bean,包含一系列的成員變數及其getter/setter方法;

2) 檢視而言,更加偏重於展現,在Java中可通過JSP來充當檢視,或通過純HTML進行展現,目前的主流是純HTML;

模型和檢視需要通過控制器來進行粘合,如使用者傳送一個HTTP請求,此時該請求首先會進入控制器,然後控制器去獲取資料並將其封裝為模型,最後將模型傳遞到檢視中進行展現。

 

2、MVC的缺點

1) 每次請求必須經過“控制器->模型->檢視”流程,使用者才能看到展現的介面;

2) 檢視是依賴於模型的,如果沒有模型,檢視也無法呈現出最終的效果;

3) 渲染檢視的過程是在服務端來完成的,最終呈現給瀏覽器的是帶有模型的檢視頁面,效能無法得到很好的優化。

 

3、改進的MVC模式

為了使資料展現過程更加直接,提供更好的使用者體驗,對MVC做了改進:首先從瀏覽器傳送Ajax請求,然後服務端接受該請求並返回JSON資料返回給瀏覽器,最後在瀏覽器中進行介面渲染。

 

4、REST

將瀏覽器視為前端,而伺服器視為後端,可以將改進的MVC模式簡化為前後端分離模式:

改進的MVC模式中,輸入的是Ajax請求,輸出的是JSON資料,REST就能實現此功能。

REST,即Representational State Transfer,表述性狀態轉移,輕量級的Web服務,習慣將其稱為RESTful Web Services,簡稱REST服務。

REST本質上是使用URL來訪問資源種方式。比較常見的URL請求方式是GET與POST,但在REST中又提出了幾種其它型別的請求方式,總共有6種:POST、DELETE、PUT、GET、HEAD、OPTIONS。前四種正好與CRUD(Create-Retrieve-Update-Delete,增刪改查)四種操作相對應。

REST是面向資源的,這裡提到的資源,實際上就是我們常說的領域物件,在系統設計過程中,我們經常通過領域物件來進行資料建模。

REST是一個無狀態的架構模式,因為在任何時候都可以由客戶端發出請求到服務端,最終返回自己想要的資料,當前請求不會受到上次請求的影響。也就是說,服務端將內部資源釋出REST服務,客戶端通過URL來訪問這些資源。

後端MVC:客戶端傳送請求 -> 伺服器觸發controller -> 伺服器進行model各種操作 -> 伺服器根據model資料渲染view -> 伺服器回覆請求,包含了整個view的HTML -> 客戶端重新渲染整個頁面,重新計算所有CSS,重新執行所有JS,重新請求所有的資源。

前端MVC:客戶端根據使用者的行為修改客戶端model -> 客戶端更新和該model相關的view -> 客戶端model傳送sync請求到伺服器,只包含改變了哪些資料 -> 伺服器稽核資料改動是否合法,只需回覆是否修改成功 -> 客戶端收到成功,什麼都不用做;不成功,則把剛才改的View改回來,然後通知使用者。前端流行的MVVM就是對於前端MVC結構的一次重新定義。

前後端MVC的對比:前端MVC需要向伺服器端傳遞和接收的資料量都少很多,前端要做的等待和渲染工作也少很多,這意味著更好、更快的使用者體驗和更低的伺服器端負載,因為基本上只需要在資料庫上提供一個RESTful API即可。