每天資訊前端知識體系(二)

菜單

前端知識體系(二)

二、前後端分離的演變史

1。什麼是MVVM

MVVM(Model-View-ViewModel)是一種軟體架構設計模式,由微軟WPF(用於替代WinForm,以前就是用這個技術開發桌面應用程式的)和Silverlight(類似於JavaApplet,簡單點說就是在瀏覽器上執行的WPF)的架構師Ken Cooper和Ted Peters開發,是一種簡化使用者介面的事件驅動程式設計方式。由John Gossman(同樣也是WPF和Silverlight的架構師)於2005年在他的部落格上發表

MVVM源自於經典的MVC(Model-View-Controller)。MVVM的核心是ViewModel層,負責轉換Model中的資料物件來讓資料變得更容易管理和使用,其作用如下:

該層向上與檢視層進行雙向繫結

向下與Model層透過介面請求進行資料互動

前端知識體系(二)

MVVM已經相當成熟了,主要運用但不僅僅在網路應用程式開發中。當下流行的MVVM框架有Vue。js、AngularJS等

舉例對比

用傳統的jQuery實現

HTML

//這是一個輸入框,輸入內容

//這裡的內容隨輸入框內容的變化而變化

$(“#app”)。on(“change”,funcation{

$(“#content”)。html(this。val());

})

用MVVM模式實現

VIEW層

HTML

//這是一個輸入框,輸入內容

//這裡的內容隨輸入框內容的變化而變化

$(“#app”)。on(“change”,funcation{

$(“#content”)。html(this。val());

})

ViewModel層 觀察者 //觀察到輸入框內容變化傳送請求到Model層

Model層 資料層 //後端收到請求進行相應的處理返回給ViewModel層,然後ViewModel又會根據返回的資料修改View層

2。為什麼要使用MVVM

MVVM 模式和 MVC 模式一樣,主要目的是分離檢視(View)和模型(Model),有幾大好處:

低耦合:檢視(View)可以獨立於Model變化和修改,一個ViewModel可以繫結到不同的View上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變

可複用:你可以把一些視覺邏輯放在一個ViewModel裡面,讓很多View重用這段檢視邏輯

獨立開發:開發人員可以專注於業務邏輯和資料的開發(ViewModel),設計人員可以專注於頁面設計

可測試:介面素來是比較難於測試的,而現在測試可以針對ViewModel來寫

3。MVVM的組成部分

前端知識體系(二)

View

View是檢視層,也就是使用者介面。前端主要由HTML和CSS來構建,為了更方便地展現ViewModel或者Model層的資料,已經產生了各種各樣的前後端模板語言,比如FreeMarker、Thymeleaf等等,各大MVVM框架如Vue。js、AngularJS、EJS等也都有自己用來構建使用者介面的內建模板語言

Model

Model是指資料模型,泛指後端進行的各種業務邏輯處理和資料操控,主要圍繞資料庫系統展開。這裡的難點主要在於需要和前端約定統一的介面規則

ViewModel

ViewModel是由前端開發人員組織生成和維護的檢視資料層。在這一層,前端開發者對從後端獲取的Model資料進行轉換處理,做二次封裝,以生成符合View層使用預期的檢視資料模型

需要注意的是ViewModel所封裝出來的資料模型包括檢視的狀態和行為兩部分,二Model層的資料模型是隻包含狀態的

比如頁面的這一塊展示什麼,那一塊站是什麼,這些都屬於檢視狀態(展示)

頁面載入進來時發生什麼,點選這一塊發生什麼,這一塊滾動時發生什麼,這些都屬於檢視行為(互動)

檢視狀態和行為都封裝在了ViewModel裡。這樣的封裝使得ViewModel可以完整地去描述View層。由於實現了雙向繫結,ViewModel的內容會實時展現在View層,這是激動人心的,因為前端開發者再也不必低效又麻煩地透過操作DOM去更新檢視

MVVM框架已經把最髒最累的一塊做好了,我們開發者只需要處理和維護ViewModel,更新資料檢視就會自動得到相應更新,真正實現事件驅動程式設計

View層展現的不是Model層的資料,而是ViewModel的資料,由ViewModel負責與Model層互動,這就完全解耦了View層和Model層,這個解耦是至關重要的,它是前後端分離方案實施的重要一環

前端知識體系(二)