MVVM 開發(fā)模式
MVVM 分為 Model、View、ViewModel 三者。
Model 代表數(shù)據(jù)模型,數(shù)據(jù)和業(yè)務邏輯都在 Model 層中定義;
View 代表 UI 視圖,負責數(shù)據(jù)的展示;
ViewModel 負責監(jiān)聽 Model 中數(shù)據(jù)的改變并且控制視圖的更新,處理用戶交互操作;
Model 和 View 并無直接關聯(lián),而是通過 ViewModel 來進行聯(lián)系的,Model 和 ViewModel 之間有著雙向數(shù) 據(jù)綁定的聯(lián)系。因此當 Model 中的數(shù)據(jù)改變時會觸發(fā) View 層的刷新,View 中由于用戶交互操作而改變的數(shù)據(jù) 也會在 Model 中同步。
這種模式實現(xiàn)了 Model 和 View 的數(shù)據(jù)自動同步,因此開發(fā)者只需要專注對數(shù)據(jù)的維護操作即可,而不需要自己 操作 dom。
MVC開發(fā)者模式
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業(yè)務邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務邏輯。MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中。
MVC 是一種使用 MVC(Model View Controller 模型-視圖-控制器)設計創(chuàng)建 Web 應用程序的模式: [1]
Model(模型)表示應用程序核心(比如數(shù)據(jù)庫記錄列表)。
View(視圖)顯示數(shù)據(jù)(數(shù)據(jù)庫記錄)。
Controller(控制器)處理輸入(寫入數(shù)據(jù)庫記錄)。
MVC 模式同時提供了對 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是應用程序中用于處理應用程序數(shù)據(jù)邏輯的部分。
通常模型對象負責在數(shù)據(jù)庫中存取數(shù)據(jù)。
View(視圖)是應用程序中處理數(shù)據(jù)顯示的部分。
通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。
Controller(控制器)是應用程序中處理用戶交互的部分。
通??刂破髫撠煆囊晥D讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。
MVC 分層有助于管理復雜的應用程序,因為您可以在一個時間內(nèi)專門關注一個方面。例如,您可以在不依賴業(yè)務邏輯的情況下專注于視圖設計。同時也讓應用程序的測試更加容易。
MVC 分層同時也簡化了分組開發(fā)。不同的開發(fā)人員可同時開發(fā)視圖、控制器邏輯和業(yè)務邏輯。
優(yōu)點
1、 耦合性低
視圖層和業(yè)務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業(yè)務流程或者業(yè)務規(guī)則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應用程序的數(shù)據(jù)層和業(yè)務規(guī)則。
2、 重用性高
隨著技術的不斷進步,需要用越來越多的方式來訪問應用程序。MVC模式允許使用各種不同樣式的視圖來訪問同一個服務器端的代碼,因為多個視圖能共享一個模型,它包括任何WEB(HTTP)瀏覽器或者無線瀏覽器(wap),比如,用戶可以通過電腦也可通過手機來訂購某樣產(chǎn)品,雖然訂購的方式不一樣,但處理訂購產(chǎn)品的方式是一樣的。由于模型返回的數(shù)據(jù)沒有進行格式化,所以同樣的構(gòu)件能被不同的界面使用。例如,很多數(shù)據(jù)可能用HTML來表示,但是也有可能用WAP來表示,而這些表示所需要的命令是改變視圖層的實現(xiàn)方式,而控制層和模型層無需做任何改變。由于已經(jīng)將數(shù)據(jù)和業(yè)務規(guī)則從表示層分開,所以可以最大化的重用代碼了。模型也有狀態(tài)管理和數(shù)據(jù)持久性處理的功能,例如,基于會話的購物車和電子商務過程也能被Flash網(wǎng)站或者無線聯(lián)網(wǎng)的應用程序所重用。
3、 生命周期成本低
MVC使開發(fā)和維護用戶接口的技術含量降低。
4、 部署快
使用MVC模式使開發(fā)時間得到相當大的縮減,它使程序員(Java開發(fā)人員)集中精力于業(yè)務邏輯,界面程序員(HTML和JSP開發(fā)人員)集中精力于表現(xiàn)形式上。
5、 可維護性高
分離視圖層和業(yè)務邏輯層也使得WEB應用更易于維護和修改。
6、 有利軟件工程化管理
由于不同的層各司其職,每一層不同的應用具有某些相同的特征,有利于通過工程化、工具化管理程序代碼??刂破饕蔡峁┝艘粋€好處,就是可以使用控制器來聯(lián)接不同的模型和視圖去完成用戶的需求,這樣控制器可以為構(gòu)造應用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器可以根據(jù)用戶的需求選擇模型進行處理,然后選擇視圖將處理結(jié)果顯示給用戶。
缺點
1、沒有明確的定義
完全理解MVC并不是很容易。使用MVC需要精心的計劃,由于它的內(nèi)部原理比較復雜,所以需要花費一些時間去思考。同時由于模型和視圖要嚴格的分離,這樣也給調(diào)試應用程序帶來了一定的困難。每個構(gòu)件在使用之前都需要經(jīng)過徹底的測試。
2、不適合小型,中等規(guī)模的應用程序
花費大量時間將MVC應用到規(guī)模并不是很大的應用程序通常會得不償失。
3、增加系統(tǒng)結(jié)構(gòu)和實現(xiàn)的復雜性
對于簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結(jié)構(gòu)的復雜性,并可能產(chǎn)生過多的更新操作,降低運行效率。
4、視圖與控制器間的過于緊密的連接
視圖與控制器是相互分離,但卻是聯(lián)系緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。
5、視圖對模型數(shù)據(jù)的低效率訪問
依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。對未變化數(shù)據(jù)的不必要的頻繁訪問,也將損害操作性能。
6、一般高級的界面工具或構(gòu)造器不支持模式
改造這些工具以適應MVC需要和建立分離的部件的代價是很高的,會造成MVC使用的困難。
MVP模式
全稱:Model-View-Presenter ;MVP 是從經(jīng)典的模式MVC演變而來,它們的基本思想有相通的地方Controller/Presenter負責邏輯的處理,Model提供數(shù)據(jù),View負責顯示。
優(yōu)點
1、模型與視圖完全分離,我們可以修改視圖而不影響模型
2、可以更高效地使用模型,因為所有的交互都發(fā)生在一個地方——Presenter內(nèi)部
3、我們可以將一個Presenter用于多個視圖,而不需要改變Presenter的邏輯。這個特性非常的有用,因為視圖的變化總是比模型的變化頻繁。
4、如果我們把邏輯放在Presenter中,那么我們就可以脫離用戶接口來測試這些邏輯(單元測試)
缺點
由于對視圖的渲染放在了Presenter中,所以視圖和Presenter的交互會過于頻繁。還有一點需要明白,如果Presenter過多地渲染了視圖,往往會使得它與特定的視圖的聯(lián)系過于緊密。一旦視圖需要變更,那么Presenter也需要變更了。比如說,原本用來呈現(xiàn)Html的Presenter現(xiàn)在也需要用于呈現(xiàn)Pdf了,那么視圖很有可能也需要變更。
MVVM與MVP區(qū)別:
mvvm模式將Presener改名為View Model,基本上與MVP模式完全一致,唯一的區(qū)別是,它采用雙向綁定(data-binding): View的 變動,自動反映在View Model,反之亦然。這樣開發(fā)者就不用處理接收事件和View更新的工作,框架已經(jīng)幫你做好了。
MVP與MVC區(qū)別:
作為一種新的模式,MVP與MVC有著一個重大的區(qū)別:在MVP中View并不直接使用Model,它們之間的通信是通過Presenter (MVC中的Controller)來進行的,所有的交互都發(fā)生在Presenter內(nèi)部,而在MVC中View會直接從Model中讀取數(shù)據(jù)而不是通過 Controller。
在MVC里,View是可以直接訪問Model的!從而,View里會包含Model信息,不可避免的還要包括一些業(yè)務邏輯。 在MVC模型里,更關注的Model的改變,而同時有多個對Model的不同顯示,即View。所以,在MVC模型里,Model不依賴于View,但是View是依賴于Model的。不僅如此,因為有一些業(yè)務邏輯在View里實現(xiàn)了,導致要更改View也是比較困難的,至少那些業(yè)務邏輯是無法重用的。
雖然 MVC 中的 View 的確“可以”訪問 Model,但是我們不建議在 View 中依賴 Model,而是要求盡可能把所有業(yè)務邏輯都放在 Controller 中處理,而 View 只和 Controller 交互。
MVC,MVP,MVVM是三種常見的前端架構(gòu)模式(Architectural Pattern),它通過分離關注點來改進代碼組織方式。不同于設計模式(Design Pattern),只是為了解決一類問題而總結(jié)出的抽象方法,一種架構(gòu)模式往往能使用多種設計模式。
MVC模式是MVP,MVVM模式的基礎,這兩種模式更像是MVC模式的優(yōu)化改良版,他們?nèi)齻€的MV即Model,view相同,不同的是MV之間的紐帶部分。