? ? 在開發過程中,我們常常會針對一類問題而制定相關的處理方案,于是就有了相關的架構模式。目前主流的架構模式最主要就是MVC、MVP和MVVM這三種。
? ? 其實在不同的開發環境下,根據實際開發環境是不會三種設計模式都使用的。Android開發環境常用到MVC、MVP兩種架構模式,iOS開發環境下常用到MVC、MVVM兩種架構模式,HTML5開發環境下常用到MVC、MVVM兩種架構模式,而Java/PHP開發環境下只常用到MVC架構模式等。對于不同的開發環境相同的模式的使用也是略有差距的,下面我們分別討論。
1 MVC架構模式
? ? MVC分別是Model(模型)、View(視圖)、Controller(控制器)三個模塊。View(視圖層)最主要完成前端的數據展示,Controller(控制層)是對數據的接收和觸發事件的接收和傳遞,Model(模型層)則是對數據的儲存和處理,再傳遞給視圖層相應或者展示。
1.1 MVC架構模式的優缺點
1.1.1 優點
(1)耦合性低
? ? 視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業務流程或者業務規則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則。
? ? 模型是自包含的,并且與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則。
(2)重用性高
? ? 在前端或者移動端部分,通過MVC模塊化分層,可以實現對不同部分的不同模塊、控件、功能進行封裝,實現多部分調用而不影響局部展示;在后臺部分,MVC模式允許使用各種不同樣式的視圖來訪問同一個服務器端的代碼,因為多個視圖能共享一個模型,這樣通過將數據和業務規則從表示層分開,所以可以最大化的重用代碼了。
(3)可維護性高
? ? 在MVC的架構搭建上,將項目實現分層開發和分層進行管理。對于不同的層各司其職,每一層不同的應用具有某些相同的特征,有利于通過工程化、工具化管理程序代碼。對于多人員協作開發,能夠很快的進行不同層級的開發,并且只需專注于自己部分的開發,再最后將每個層級進行匯總即可。
1.1.2 缺點
(1)沒有明確的定義
? ? 完全理解MVC并不是很容易。使用MVC需要精心的計劃,由于它的內部原理比較復雜,所以需要花費一些時間去思考。同時由于模型和視圖要嚴格的分離,這樣也給調試應用程序帶來了一定的困難。每個構件在使用之前都需要經過徹底的測試。
(2)不適合小型,中等規模的應用程序
? ? 花費大量時間將MVC應用到規模并不是很大的應用程序通常會得不償失。
(3)增加系統結構和實現的復雜性
? ? 對于簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的復雜性,并可能產生過多的更新操作,降低運行效率。
(4)視圖與控制器間的過于緊密的連接
? ? 視圖與控制器是相互分離,但卻是聯系緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。
(5)視圖對模型數據的低效率訪問
? ? 依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。
(6)一般高級的界面工具或構造器不支持模式
? ? 改造這些工具以適應MVC需要和建立分離的部件的代價是很高的,會造成MVC使用的困難。
1.2 不同開發環境上區別
1.2.1 Java/PHP開發環境
? ? 在Java/PHP開發環境下,用戶開始通過View(視圖)接收數據和事件響應,之后將數據和響應傳輸到Controller(控制器),再將數據分配到相應的Model(模型),在Model(模型)部分將數據進行存儲,并通過通知的方式將數據傳輸給View(視圖)結束。整個過程是單鏈條的傳遞,在Java/PHP開發中多將業務邏輯寫在Model層,使得Model層比較厚,而Controller層比較薄。
1.2.2 前端開發環境
? ? 在前端開發環境下,用戶開始通過View(視圖)接收數據和事件響應,之后將數據和響應傳輸到Controller(控制器),再將數據分配到相應的Model(模型),在Model(模型)部分將數據進行存儲,并通過通知的方式將數據傳輸給View(視圖)結束。整個過程是單鏈條的傳遞,在前端開發中多將業務邏輯寫在View層,使得View層比較厚,而Controller層比較薄。
1.2.3 Android開發環境
? ? 在安卓開發環境下,除了像HTML5環境下那種傳遞方式外,最主要是通過Controller層將數據返回給View層。基本的業務邏輯寫在Controller層上,導致Controller層的臃腫復雜。
1.2.4 iOS開發環境
? ? 在iOS開發環境下,View層和Model層完全分離,用戶通過View層將數據和事件響應傳遞給Controller層, Controller層進行進行業務邏輯處理,再將數據儲存在Model上面,Controller層通過取Model里面的數據,再將數據加載在View層上。整個過程Controller層起了決定性的作用,也寫入了很多的代碼,造成Controller層的臃腫復雜。
2 MVP架構模式
? ? MVP架構模式是Model(模型)、View(視圖)、Presenter(表示器)組成。
? ? MVP架構模式最主要是針對Android的MVC架構模式進行改進的,MVP與MVC最不同的一點是M與V是不直接關聯的也是就Model與View不存在直接關系,這兩者之間間隔著的是Presenter層,其負責調控View與Model之間的間接交互。
3 MVVM架構模式
? ? MVVM是Model(數據層)、ViewController/View(展示層)、ViewModel(數據模型)組成。
? ? MVVM架構模式最主要是針對前端和iOS的MVC架構模式進行改進的,減輕Controller層或者View層的壓力,實現更加清晰化代碼。通過對ViewModel層的封裝:封裝業務邏輯處理,封裝網絡處理、封裝數據緩存等,讓邏輯處理分離出來,并且不需要處理Model數據,使得Controller層或者View層結構簡單,條理清晰。