前后端分層架構MVC&MVVM


早期


 

特點

  頁面由 JSP、PHP 等工程師在服務端生成

  JSP 里揉雜大量業務代碼

  瀏覽器負責展現,服務端給什么就展現什么,展現的控制在 Web Server 層

優點

  簡單明快,本地起一個 Tomcat 或 Apache 就能開發,調試什么的都還好,只要業務不太復雜。

缺點

   前端難以搭建本地環境

  代碼重用性,擴展性,維護性很低

后端 MVC 開發


 

特點

  • View:進行數據顯示。
  • Model:用於封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。
  • Controller:處理用戶交互,負責轉發請求,並對請求進行處理(向模型請求數據或發送數據)

    服務器端的MVC流程:

    客戶端發送請求 -> 服務器觸發Controller -> 服務器進行Model各種操作 -> 服務器根據Model數據渲染View -> 服務器回復請求,包含了整個View的html -> 客戶端重新渲染整個頁面,所有的css都又計算了一遍,所有的js都重新執行了一遍,所有的資源都重新請求了一遍(雖然可能已經cache了)

 

優點

  代碼可維護性得到明顯好轉

  線上模板的渲染還是由java來做的,形成的是帶有動態數據的html,比較有利於SEO

缺點

    隨着不同終端的出現,前端的工作量變大。但是前端依然依賴着后端(都在一個項目中進行開發)

  前后端職責依舊糾纏不清

前后端分離


 

特點

  ajax帶來了Web開發革命性的變化。前端和應用服務器分離,前端和后端通過Ajax來通信。

  前后端分工,前端使用ajax與后端數據交互,操作視圖,甚至控制部分路由,后端提供服務與數據。

 

優點

   前后端的分工非常清晰

缺點

   前端邏輯越來越重,越來越復雜,路由不好掌控。過分使用ajax不利於SEO。前端不坑重負

   這與 JSP 時代區別不大。復雜度從服務端的 JSP 里移到了瀏覽器的 JavaScript,瀏覽器端變得很復雜

前端分層


 

特點

  后端思想在前端進行應用 

  前端代碼變得也需要保存數據、處理數據、生成視圖(SPA),這導致了前端 MVC 框架的誕生

  前端的MVC只是后端MVC中的View里面再去分出來的MVC。前端的MVC是為了解決復雜前端情況下模塊化 JS的問題。

  一個事件的發生是這樣的過程:
  1. 用戶和應用產生交互。
  2. 控制器的事件處理器被觸發。
  3. 控制器從模型中請求數據,並將其交給視圖。
  4. 視圖將數據呈現給用戶。

  模型

  用來存放應用的所有數據對象。比如,可能有一個User模型,用以存放用戶列表、他們的屬性及所有與模型有關的邏輯;當控制器從服務器抓取數據或創建新的記錄時,它就將數據包裝成模型實例。也就是說,我們的數據是面向對象的,任何定義在這個數據模型上的函數或邏輯都可以直接被調用。

  視圖

  呈現給用戶的,用戶與之產生交互。在JavaScript應用中,視圖大都是由HTML、CSS、JavaScript模板組成的。除了模板中簡單的條件語句之外,視圖不應當包含任何其他邏輯。
  將邏輯混入視圖之中是編程的大忌,這並不是說MVC不允許包含視覺呈現相關的邏輯,只要這部分邏輯沒有定義在視圖之內即可。我們將視覺呈現邏輯歸類為“視圖助手”(helper):和視圖相關的獨立的小工具函數。

  控制器

  模型和視圖之間的紐帶。控制器從視圖獲取事件和輸入,對它們(很可能包含模型)進行處理,並相應地更新視圖。當頁面加載時,控制器會給視圖添加事件監聽,比如監聽表單提交或按鈕點擊。然后,當用戶和你的應用產生交互時,控制器中的事件觸發器就開始工作了。

 

后端MVC中的view是前端MCV的全部

 

  前端MVC流程(前端其實大部分是MV+X,不一定有Controller):

  客戶端根據用戶的行為修改客戶端Model -> 客戶端更新和該Model相關的View -> 客戶端Model發送sync請求到服務器,只包含改變了哪些數據 -> 服務器審核數據改動是否合法,只需回復是否修改成功 -> 客戶端收到成功,什么都不用做;不成功,則把剛才改的View改回來,然后通知用戶。(當然,也可以在客戶端的Model里面也加入審核機制,這樣對不合法數據的反應更快,但還是得保留服務器端的審核)

  比較一下可以看到,前端MVC需要向服務器端傳遞和接收的數據量都少很多,而前端要做的等待和渲染工作也少了很多。換言之,會提供更快的交互反饋,也意味着更好的用戶體驗。同時,服務器端的負載也略有降低,因為基本上只需要在數據庫上提供一個RESTful API即可。

優點

  清晰的分工,可以讓開發並行

  部署相對獨立,產品體驗可以快速改進。

缺點

  開發者在代碼中大量調用相同的DOM API, 處理繁瑣,操作冗余,使得代碼難以維護

  大量的DOM 操作使頁面渲染性能降低,加載速度變慢,影響用戶體驗。
  當 Model 頻繁發生變化,開發者需要主動更新到View ;當用戶的操作導致Model發生變化,開發者同樣需要將變化的數據同步到Model中, 這樣的工作不僅繁瑣,而且很難維護復雜多變的數據狀態。

MVVM 模式


 

特點

另一些框架提出 MVVM 模式,用 View Model 代替 Controller。

  • Model
  • View
  • View-Model:簡化的 Controller,為 View 提供處理好的數據,不含其他邏輯。

本質:view 綁定 view-model,視圖與數據模型強耦合。數據的變化實時反映在 view 上,不需要手動處理。

 

優點 

  前端應用的復雜程度已不同往日,暴露出了三個痛點問題:
  開發者在代碼中大量調用相同的DOM API, 處理繁瑣,操作冗余,使得代碼難以維護。
  大量的DOM 操作使頁面渲染性能降低,加載速度變慢,影響用戶體驗。
  當 Model 頻繁發生變化,開發者需要主動更新到View ;當用戶的操作導致Model發生變化,開發者同樣需要將變化的數據同步到Model中, 這樣的工作不僅繁瑣,而且很難維護復雜多變的數據狀態。
  早期 jQuery 的出現就是為了前端能更簡潔的操作DOM 而設計的,但它只解決了第一個問題,另外兩個問題始終伴隨着前端一直存在。
  MVVM 的出現,完美解決了以上三個問題。
  MVVM 的三部分:
   Model 層代表數據模型,也可以在Model中定義數據修改和操作的業務邏輯;
  View 代表UI 組件,它負責將數據模型轉化成UI 展現出來,
  ViewModel 是一個同步View 和 Model的對象。
  View 和 Model 之間並沒有直接的聯系,而是通過ViewModel進行交互。
  ViewModel 通過雙向數據綁定把 View 層和 Model 層連接了起來,而View 和 Model 之間的同步工作完全是自動的,無需人為干涉,因此開發者只需關注業務邏輯,不需要手動操作DOM, 不需要關注數據狀態的同步問題,復雜的數據狀態維護完全由 MVVM 來統一管理。

缺點

    代碼不能復用。比如后端依舊需要對數據做各種校驗,校驗邏輯無法復用瀏覽器端的代碼。如果可以復用,那么后端的數據校驗可以相對簡單化。
   全異步,對 SEO 不利。往往還需要服務端做同步渲染的降級方案。
   性能並非最佳,特別是移動互聯網環境下。

 

參考:https://blog.csdn.net/u010924834/article/details/51025127 

     https://github.com/lifesinger/blog/issues/184


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM