軟件架構(gòu)設(shè)計是將軟件一些共有的特征轉(zhuǎn)換為滿足業(yè)務(wù)需求和技術(shù)要求的結(jié)構(gòu)化方案的過程。軟件架構(gòu)設(shè)計的目的是為了實現(xiàn)系統(tǒng)的長期可維護性、可擴展性、可靠性和安全性,以滿足業(yè)務(wù)需求和未來可能的變化。
在過去的幾年里,軟件架構(gòu)的設(shè)計模式層出不窮,每一個模式的出現(xiàn),都是試圖想使代碼更可讀、更容易于測試、更易于維護以及讓開發(fā)人員更輕松。但同時,每個模式的出現(xiàn)也都有適應(yīng)的場景和優(yōu)劣。
本文主要將MVC、MVP、MVVM、HMVC、MVA、MVI和VIPER等,幾個常見的設(shè)計模式做一個匯總的介紹。
MVC是一種體系架構(gòu),經(jīng)典MVC模式中,M是指模型,V是視圖,C則是控制器,使用MVC的目的是將M和V的實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式。其中,View就是用戶界面。
使用MVC的框架如:SpringMVC、Ruby on rails、Django、AngularJS、React、Express.js。
MVP的全稱是Model-View-Presenter,是從經(jīng)典的MVC模式演變而來,也是一種包含模型、視圖和視圖的體系結(jié)構(gòu)。
MVP和MVC的基本思想有許多相通的地方,例如:Controller/Presenter負責邏輯的處理,Model提供數(shù)據(jù),View負責顯示。
但MVP與MVC有著一個重大的區(qū)別在于MVP中視圖中不包含任何邏輯,只是作為應(yīng)用程序的外觀,Presenter充當模型和視圖之間的中間人。MVP中的View并不直接使用Model,它們之間的通信是通過Presenter(MVC中的Controller)來進行的,所有的交互都發(fā)生在Presenter內(nèi)部,而在MVC中View會直接從Model中讀取數(shù)據(jù)而不是通過Controller。
在Android開發(fā)中,MVP模式克服了MVC模式的這些挑戰(zhàn),并且提供了一種簡單的方法來構(gòu)造項目代碼。
MVVM是Model-View-ViewModel的簡寫。其本質(zhì)是MVC的改進模式。主要區(qū)別在于視圖和模型,視圖和模型保存了從模型轉(zhuǎn)換數(shù)據(jù)的代碼,并直接將數(shù)據(jù)變化發(fā)送到視圖,有助于保持每個模型直接與其各自的視圖交互,而不必擔心不同的模型影響到其它視圖。
MVVM模式有助于將應(yīng)用程序的業(yè)務(wù)和表示邏輯與用戶界面 (UI) 清晰分離。保持應(yīng)用程序邏輯和UI之間的清晰分離有助于解決許多開發(fā)問題,并使應(yīng)用程序更易于測試、維護和演變。它還可以顯著提高代碼重用率,并允許開發(fā)人員和UI設(shè)計人員在并行開發(fā)各自的應(yīng)用部分時能夠更輕松地進行協(xié)作。
使用MVVM的框架如:MVVMLight、Cinch、Prism、Caliburn、MVVM Helpers、MVVMFoundation。
HMVC(全稱Hierarchical-Model-View-Controller),也可以叫做 Layered MVC。顧名思義,就是按等級劃分的 MVC 模式,簡單的解釋就是把MVC又細分成了多個子 MVC,每個模塊就分成一個 MVC。
使用 HMVC 的好處就是可以降低各個功能模塊之間的耦合性,提高代碼復(fù)用性,使得每個功能都可以獨立出來,每個模塊都有自己的 MVC 結(jié)構(gòu),這就有點像ActiveX控件,每個控件都有自己的行為,控件之間互不影響。這種架構(gòu)風格的將應(yīng)用程序調(diào)整為更小、更易于管理、可以獨立運行的模塊。由于在創(chuàng)建新模塊時控制器能夠相互調(diào)用,因此要在應(yīng)用程序中進行功能擴展更加容易。
許多PHP框架是基于HMVC,例如:FuelPHP、PHPPixie、ClanCats。
MVA(全稱:Model View Adapter),MVA和MVC都試圖解決同樣的問題,但MVA與MVC有一個區(qū)別:MVC的模型、視圖和控制器的關(guān)系形成一個三角形,模型、視圖和控制器作為頂點,一些信息可以在模型和視圖之間流動,而不受控制器的直接控制;而MVA使用適配器(Adapter)代替控制器,MVA通過線性地安排模型、適配器或中介控制器和視圖,而沒有模型和視圖之間的任何直接連接,在這種架構(gòu)中,模型和視圖不知道彼此的存在。在單個模型和視圖之間,可以有許多適配器,它們修改來自模型的信息在視圖中的呈現(xiàn)方式。
當我們需要將數(shù)據(jù)與GUI分離時,MVA就很有參考價值。在一些移動應(yīng)用開發(fā)的框架中經(jīng)常被使用。
MVI與MVP和MVVM相比,它的設(shè)計模式考慮到了反應(yīng)式編程。MVI模式的數(shù)據(jù)流是單向的,從Model到View。View不能直接修改狀態(tài),而是通過發(fā)送Intent到Model來更新狀態(tài)并將其發(fā)送回View。
MVI架構(gòu)模式包括三個主要組件:Model(模型)、View(視圖)和Intent(意圖)。
VIPER(全稱:View-Interactor-Presenter-Entity-Router) 即:視圖、交互器、演示器、實體、路由器。VIPER是由Uber的iOS開發(fā)團隊提出的一種適用于iOS應(yīng)用程序的設(shè)計模式。VIPER架構(gòu)的目的是將應(yīng)用程序分解為不同的模塊,使得應(yīng)用程序更容易維護和擴展,并且各個模塊之間相互獨立,減少了耦合性。
VIPER架構(gòu)模式包含以下五個模塊:
VIPER架構(gòu)的優(yōu)點是明確的職責分離和解耦,每個模塊都有明確的職責和接口,方便團隊合作開發(fā)和維護。它還可以提高應(yīng)用程序的可測試性,每個模塊都可以進行單元測試,減少了代碼的出錯率。
本文鏈接:http://www.tebozhan.com/showinfo-26-14625-0.html軟件設(shè)計模式之MVC、MVP、MVVM、HMVC、MVA、MVI和VIPER
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 接口響應(yīng)慢該如何排查