在徐飛的這篇文章中,第五節:「為什麼MVVM是個很好的選擇」中,有提到商業模型和視圖模型,他們具體指什麼?
【商業模型】和【領域模型】較為相似,可指用於表達業務內容的資料。例如淘寶的商業模式是【商品】,部落格的商業模式是【博文】,推特的商業模式是【推文】。可以理解為經典 MVC 中的 Model,包含了名稱、描述、時間、作者、價格等【真正意義上的】資料欄位內容。
而【視野模型】則是 MVVM 興盛後的新概念。要實作一個完整的 Web App,除了資料外,還有 UI 互動中非常多的【狀態】。例如:彈框是否開啟、使用者是否正在輸入、請求Loading 狀態是否需要顯示、圖表資料分類是否需要顯示追加欄位、和使用者輸入時文字的大小和樣式的動態改變…這些和特定資料欄位無關,但對前端實際業務場景非常重要的視圖狀態,可以認為是一種【視圖模型】。在 Vue 一類的 MVVM 函式庫中,上述例子中的狀態都能夠用 JS 變數來表示和控制,這同樣可以認為是一種資料模型。
因此,商業模型和視圖模型在前端都是十分重要的概念。在 MVVM 解決了商業模型資料到頁面之間的綁定關係後,Redux 等狀態管理庫想要解決的則是富交互頁面中,視圖模型狀態極度膨脹所帶來的一系列問題了。對這些模型有更深的理解,實際上也有助於理解前端目前的發展方向。
舉個栗子就懂
//业务模型 function UserBM(){ this.username; this.password; this.address; } //视图模型 function UserVM(){ this.username; this.password; this.address; this.isShowHelloMessage; this.isShowAddress; }
【商業模型】和【領域模型】較為相似,可指用於表達業務內容的資料。例如淘寶的商業模式是【商品】,部落格的商業模式是【博文】,推特的商業模式是【推文】。可以理解為經典 MVC 中的 Model,包含了名稱、描述、時間、作者、價格等【真正意義上的】資料欄位內容。
而【視野模型】則是 MVVM 興盛後的新概念。要實作一個完整的 Web App,除了資料外,還有 UI 互動中非常多的【狀態】。例如:彈框是否開啟、使用者是否正在輸入、請求Loading 狀態是否需要顯示、圖表資料分類是否需要顯示追加欄位、和使用者輸入時文字的大小和樣式的動態改變…這些和特定資料欄位無關,但對前端實際業務場景非常重要的視圖狀態,可以認為是一種【視圖模型】。在 Vue 一類的 MVVM 函式庫中,上述例子中的狀態都能夠用 JS 變數來表示和控制,這同樣可以認為是一種資料模型。
因此,商業模型和視圖模型在前端都是十分重要的概念。在 MVVM 解決了商業模型資料到頁面之間的綁定關係後,Redux 等狀態管理庫想要解決的則是富交互頁面中,視圖模型狀態極度膨脹所帶來的一系列問題了。對這些模型有更深的理解,實際上也有助於理解前端目前的發展方向。
舉個栗子就懂