寧君宇 陳森


摘 要:當下MVP設計模式大量的應用于移動端安卓應用程序的開發(fā)架構(gòu)中,該設計模式的引入使得安卓程序的開發(fā)降低了耦合,增加了程序的原子性,方便了程序測試,增強了程序的穩(wěn)定性。本文首先介紹了什么是MVP設計模式,之后列舉了MVP和MVC模式的區(qū)別,然后展示MVP設計模式在安卓開發(fā)中的應用,最后分析了MVP設計模式的優(yōu)缺點及該如何選擇設計模式。
關(guān)鍵詞:安卓開發(fā);MVP設計模式;低耦合
隨著時代的不斷前進,移動互聯(lián)網(wǎng)以其快捷、經(jīng)濟、方便等特點,悄然走入人們的生活。移動應用安卓端的開發(fā)作為其中一個重要部分也在蓬勃發(fā)展,在安卓移動應用開發(fā)中,傳統(tǒng)的MVC設計模式的缺點被不斷的放大,影響了程序開發(fā)的效率和穩(wěn)定性,這時MVP設計模式走入了安卓開發(fā)的視野之中。
1 MVP設計模式
MVP,全稱 Model-View-Presenter。MVP是在MVC的基礎上變化而出的,他們的思想有一些相通的地方。在MVP設計模式中,Model層只需要專注于數(shù)據(jù)的處理,View層專注于界面的展示,及生命周期的控制,而Presenter層負責全部業(yè)務處理,提供View層想要的數(shù)據(jù),成為View層與Model層之間的橋梁。
2 MVP和MVC模式的對比
MVP和MVC模式的結(jié)構(gòu)圖,如圖1所示:
由上圖可看出,MVP模式和MVC模式的主要區(qū)別有:Presenter的出現(xiàn)成為了View和Model層溝通的橋梁,降低了它們的直接交互,從而降低View和Model之間的耦合度,增加了程序的可維護性和可測試性。Presenter承擔了更多的工作,內(nèi)部的復雜度要大于Controller。View層更加的純粹,不負責業(yè)務邏輯,專注于界面的展示,在安卓的開發(fā)過程中需要負責生命周期的控制。
3 在安卓開發(fā)中的應用
安卓開發(fā)之前采用的是MVC模式,在該模式下,安卓開發(fā)中的Activity和Fragment即屬于V層也屬于C層,承擔兩層的工作,且都需要處理各種生命周期相關(guān)的業(yè)務,導致在復雜的業(yè)務下,Activity和Fragment會非常的臃腫,代碼結(jié)構(gòu)不清晰,維護起來也特別的困難。為解決這些問題,安卓開發(fā)引入了MVP設計模式,結(jié)構(gòu)如圖2所示:
可以看到,在View與Model之間不直接溝通,降低了這兩層之間的耦合度,中間的Presenter對上銜接View層的數(shù)據(jù)需要,對下銜接Model層的數(shù)據(jù)傳送,中間處理具體的業(yè)務程序。結(jié)構(gòu)更加的清晰,方便程序的編寫和維護也方便進行單元測試。
4 MVP設計模式的優(yōu)缺點
MVP設計模式的優(yōu)點是:減低耦合,實現(xiàn)了Model與View 的真正分離,修改View而不影響Model。模塊職責分明,層次分明,便于維護,多人開發(fā)首選。Presenter可復用,一個Presenter可以用于多個View,不用去改Presenter利于單元測試。模塊分明,方便單元測試,而不用特意搭建平臺,人工模擬用戶操作等等耗時耗力的事情。
缺點是:架構(gòu)的引入在邏輯上清晰了,但代碼量增加了很多,不利于小工程項目的開發(fā)和使用。
由于Presenter層負責給View層提供數(shù)據(jù),在View層需要數(shù)據(jù)較多的情況下,會導致Presenter層和View層之間的交互較為頻繁,在一定程度上增加了他們的耦合度。
5 總結(jié)
本文首先介紹了什么是MVP設計模式,對比了MVC和MVP設計模式的區(qū)別,然后介紹了MVP設計模式在安卓應用開發(fā)中的使用及其優(yōu)缺。移動應用的開發(fā)依然在不斷的前進,新的設計模式也會層出不窮,沒有完美的設計模式,只有符合自己業(yè)務的設計模式,所以研發(fā)人員一定要根據(jù)具體的業(yè)務選擇適合自己開發(fā)模式。
參考文獻:
[1]劉宇,蔡俊濤,賴順橋,等.基于MVC和實體框架的道路照明智能管理系統(tǒng)[J].計算機與現(xiàn)代化,2015(10):64-68.
[2]王念橋.應用MVP模式改進軟件架構(gòu)[J].計算機時代,2012(4):37-38.
[3]鄧志宏,張智,李建奇,等.基于MVP模式的進銷存系統(tǒng)的軟件架構(gòu)設計[J].計算機與數(shù)字工程,2010,38(12):96-99.
[4]葛管庫.MVC模式下程序設計[J].軟件,2013,34(2):49-51.