JavaScript /MV*/ 模式

鑒于上篇文章在上周五會議上被問到一些基礎性問題時引發(fā)了一些碰撞搞得我好尷尬,這篇我盡量寫的完備一些,但是我不寫示例代碼了,這篇文章最低門檻幾乎和上一篇一樣,是需要小伙伴們知道 JavaScript 是什么,/MV*/ 這個正則表達式能夠匹配到什么。

背景

最近為開發(fā)新版瑞信通做準備,看 demo 源碼時注意到 cache.js 中的一段注釋:

// 建議開發(fā)者選擇mvvm框架來通過數(shù)據(jù)來驅動UI變化

此篇我和小伙伴們分享的就是 MVVM,但是介紹 MVVM 之前,完備性起見要從 MVCMVP 開始。
因為我手頭有 《JavaScript 設計模式》這本書,此篇文章也算是我對這本書做筆記了。

MVC

我覺得 MVCwell-known 并不會引起小伙伴們質疑,正文從下述 MVP 簡介開始。

MVP

模型-視圖-表示器(MVP)是 MVC 設計模式的一種衍生模式,專注于改進表示邏輯。它是在 1990 年代由 Taligent 公司創(chuàng)造的。

Model、View 和 Presenter

MVP 中的 P 代表表示器。這是一個包含用于 View(視圖)的用戶界面業(yè)務邏輯的組建。與 MVC 不同,來自 View(視圖)的調(diào)用將委托給表示器,表示器是從 View(視圖)中解耦,通過接口與它對話。
最后一句話總結一下 MVPMVC 之間的區(qū)別:

Model View Presenter 設計模式實際上就是許多開發(fā)人員已經(jīng)熟悉的模型視圖控制器的一個最新版本;兩者的主要區(qū)別是 MVP 真正將 UI 從應用程序的域/服務層中分離。

MVVM

MVVM(模型-視圖-視圖模型)是一種基于 MVCMVP 的架構模式,它試圖更清晰地將用戶界面(UI)開發(fā)從應用程序的業(yè)務邏輯與行為中分離。
Model:和 MV* 家族的其他成員一樣,MVVM 中的 Model(模型)表示應用程序將會使用的特定領域數(shù)據(jù)或信息。

View:與 MVC 一樣,View 實際上僅是與用戶進行交互的應用程序的一部分。
ViewModel:可以將 ViewModel 作為一個專門的 Controller,充當數(shù)據(jù)轉換器。它將 Model 信息轉變?yōu)?View 信息,還將命令從 View 傳遞到 Model

小結:ViewViewModel、ViewModelModel

ViewViewModel 之間通過數(shù)據(jù)綁定和事件進行通信。View 處理自己的用戶界面事件,必要是將它們映射到 ViewModel。ModelViewModel 上的屬性通過雙向數(shù)據(jù)綁定進行同步和更新。
ViewModel 似乎是完全負責 MVVM 中的 Model,但這種關系中有一些微妙之處值得我們注意。ViewModel 可以為了數(shù)據(jù)綁定而暴露 ModelModel 屬性,也可以包含接口,用于獲取和操作在 View
中暴露的屬性。

MVC、MVP 與 MVVM

MVPMVVM 均是 MVC 的衍生品。MVC 與其衍生品之間的主要區(qū)別是每一層對其他層的依賴,以及它們是如何緊密地互相綁定的。

MVC 中,View 位于架構之上,與 Controller(控制器)相鄰。Model 位于 Controller(控制器)之下,因此 View 了解 Controller(控制器),Controller(控制器)了解 Model。在這里,View 能夠直接訪問 Model。但是,向 View 暴露完整的 Model 可能會帶來安全性和性能成本,這取決與應用程序的復雜性。MVVM 試圖避免這些問題。
MVP 中,Controller(控制器)的作用被 Presenter 所替代。表示器與 View(視圖)位于同一位置,監(jiān)聽 ViewModel 的事件,并調(diào)解它們之間的行動。與 MVVM 不同,它沒有使用將 View 綁定至 ViewModel 的機制,因此我們轉而依賴每個 View 來實現(xiàn)用于讓 PresenterView 進行交互的接口。
因此,MVVM 允許我們創(chuàng)建 Model 的特定于 View 的子集,它們可以包含狀態(tài)和邏輯信息,無需向 View 暴露整個 Model。與 MVPPresenter 不同,引用 View 時不需要 ViewModelView 可以綁定到 ViewModel 上的屬性,而屬性會將 Model 所包含的數(shù)據(jù)暴露給 View。如前所述,View 的抽象意味著它背后的代碼所要求的邏輯更少了。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容