基于MVC模式的安卓系統(tǒng)工程結(jié)構(gòu)設(shè)計(jì)
隨著安卓系統(tǒng)的快速發(fā)展,基于安卓系統(tǒng)的軟件開發(fā)越來越流行。根據(jù)Kantar WorldPennel發(fā)布的最新數(shù)據(jù),IOS系統(tǒng)在中國(guó)市場(chǎng)的份額為27.1%,而Android系統(tǒng)的市場(chǎng)份額則高達(dá)71.4%。Android系統(tǒng)及應(yīng)用主要是用在目前智能終端設(shè)備上,例如:手機(jī)、PAD等,不僅可以實(shí)現(xiàn)語音視頻的基礎(chǔ)通信需求,而且還可以滿足現(xiàn)場(chǎng)工業(yè)控制的功能要求。本文主要是基于MVC模式來設(shè)計(jì)安卓系統(tǒng)工程結(jié)構(gòu)。從而降低安卓系統(tǒng)開發(fā)人員的開發(fā)難度,提高開發(fā)效率。
MVC是三個(gè)單詞的縮寫,分別為: 模型(Model),視圖(View)和控制Controller)。MVC模式的目的就是實(shí)現(xiàn)Web系統(tǒng)的職能分工。采用MVC模式設(shè)計(jì)的架構(gòu)具有低耦合性、代碼重用性等特點(diǎn),能有效地降低軟件的開發(fā)成本,有利于提高軟件的可維護(hù)性和工程化管理。MVC模式有諸多優(yōu)勢(shì),將MVC模式應(yīng)用到安卓系統(tǒng)項(xiàng)目的開發(fā)中,必然可以提高安卓項(xiàng)目的開發(fā)質(zhì)量,降低維護(hù)難度。
在安卓系統(tǒng)項(xiàng)目的開發(fā)過程中,沒有一個(gè)明確的代碼開發(fā)規(guī)范和結(jié)構(gòu),會(huì)導(dǎo)致開發(fā)的系統(tǒng)模塊難以維護(hù),各個(gè)模塊之間處于高耦合度狀態(tài)。會(huì)給后期的維護(hù)和升級(jí)帶來很大的困難。
在安卓項(xiàng)目的開發(fā)中使用MVC思想來設(shè)計(jì)項(xiàng)目的結(jié)構(gòu),能使得模塊的分工明確,代碼可復(fù)用性高,模塊之間的耦合度降低,有利于代碼的修改和移植,整個(gè)系統(tǒng)的結(jié)構(gòu)清晰。安卓系統(tǒng)的MVC實(shí)現(xiàn)思路如圖1所示。
圖1 Android工程結(jié)構(gòu)
在上圖中將工程結(jié)構(gòu)分為交互層、控制器層、業(yè)務(wù)層、中間數(shù)據(jù)池、工具類、文件系統(tǒng)、數(shù)據(jù)庫(kù)、通訊模塊、服務(wù)器端9部分。
交互層:負(fù)責(zé)客戶端的頁(yè)面展示和人機(jī)交互。
控制器層:負(fù)責(zé)調(diào)用業(yè)務(wù)層方法和將業(yè)務(wù)層處理結(jié)果返回給交互層,是交互層和業(yè)務(wù)層的橋梁。
業(yè)務(wù)層:負(fù)責(zé)處理系統(tǒng)的主要業(yè)務(wù)邏輯。
工具類:負(fù)責(zé)向業(yè)務(wù)層提供支持,包括對(duì)客戶端數(shù)據(jù)庫(kù)的訪問以及系統(tǒng)的文件的操作。
中間數(shù)據(jù)池:用于緩存系統(tǒng)中的臨時(shí)數(shù)據(jù),提供給業(yè)務(wù)層做臨時(shí)數(shù)據(jù)支持。
通訊模塊:Android系統(tǒng)的通訊主要分為兩種類型,一種是自定義通訊協(xié)議,通過Socket模式來達(dá)到與服務(wù)器交互。另一種是調(diào)用WebService接口來與服務(wù)器交互。通訊模塊負(fù)責(zé)系統(tǒng)的數(shù)據(jù)傳輸與通訊,對(duì)整個(gè)android應(yīng)用提供支持。
服務(wù)器端:為Android客戶端提供業(yè)務(wù)支持,是整個(gè)系統(tǒng)的核心部分。
整體安卓系統(tǒng)設(shè)計(jì)結(jié)構(gòu)的實(shí)現(xiàn)思路為:用戶通過Activtiy所展示的頁(yè)面與系統(tǒng)做交互,Activity根據(jù)用戶所選擇的操作去告訴控制器調(diào)用業(yè)務(wù)層的哪個(gè)方法,根據(jù)控制器調(diào)用業(yè)務(wù)層返回的結(jié)果刷新Activity??刂破髟谡麄€(gè)程序中負(fù)責(zé)響應(yīng)Activity的事件請(qǐng)求并調(diào)用業(yè)務(wù)層的方法,在業(yè)務(wù)層調(diào)用結(jié)束后通知Activity刷新或是跳轉(zhuǎn)。如果調(diào)用業(yè)務(wù)層有異常情況,控制器負(fù)責(zé)將錯(cuò)誤信息返回給Activity通知用戶。業(yè)務(wù)層負(fù)責(zé)處理整個(gè)客戶端的業(yè)務(wù)邏輯處理。業(yè)務(wù)層的主要工作還是將客戶端從服務(wù)器獲取的數(shù)據(jù)進(jìn)行轉(zhuǎn)換或處理。工具類負(fù)責(zé)對(duì)業(yè)務(wù)層的工具支持。比如說文件的訪問、復(fù)制、修改、客戶端數(shù)據(jù)庫(kù)的連接、增刪改查、客戶端數(shù)據(jù)加密等。中間數(shù)據(jù)池存儲(chǔ)一些在軟件運(yùn)行過程中的臨時(shí)數(shù)據(jù)或是業(yè)務(wù)層在處理業(yè)務(wù)時(shí)常需要的數(shù)據(jù)。中間數(shù)據(jù)池是以Java中Map的對(duì)象存儲(chǔ)數(shù)據(jù),即鍵值對(duì)。中間數(shù)據(jù)池的好處是其中的數(shù)據(jù)隨時(shí)都可以被訪問,沒有訪問范圍,可以避免不同Activity之間跳轉(zhuǎn)攜帶數(shù)據(jù)的繁瑣操作。缺點(diǎn)是數(shù)據(jù)的Key使用需要有規(guī)范的寫法,否則有可能導(dǎo)致數(shù)據(jù)池內(nèi)數(shù)據(jù)混亂,造成程序的業(yè)務(wù)處理錯(cuò)誤。還有就是當(dāng)客戶端程序出現(xiàn)無法恢復(fù)的錯(cuò)誤時(shí),數(shù)據(jù)池會(huì)隨之銷毀,用戶需要重新打開程序。通訊模塊是客戶端與服務(wù)器溝通的橋梁,通訊模塊負(fù)責(zé)將客戶端的數(shù)據(jù)傳輸?shù)椒?wù)器和接收服務(wù)器的響應(yīng)和數(shù)據(jù)。是客戶端與服務(wù)器的溝通橋梁。
在Android開發(fā)過程中,采用這種系統(tǒng)結(jié)構(gòu)符合MVC的設(shè)計(jì)思想,整個(gè)系統(tǒng)不混亂臃腫,各個(gè)模塊都有其單獨(dú)的功能。工程維護(hù)、調(diào)試和擴(kuò)展起來也比較容易。其中工具類、數(shù)據(jù)池在其他工程中也可以進(jìn)行重用。
圖2 Android工程結(jié)構(gòu)圖
圖3 登錄序列圖
下面以模擬系統(tǒng)登錄業(yè)務(wù)為例,結(jié)合上述Android工程的MVC設(shè)計(jì)思想進(jìn)行實(shí)例解析。工程結(jié)構(gòu)如圖2所示。
在項(xiàng)目結(jié)構(gòu)中,communication包為通訊模塊,根據(jù)系統(tǒng)的服務(wù)器支持不同,可以選擇Socket通訊模式或WebService調(diào)用。Service包為系統(tǒng)的業(yè)務(wù)實(shí)現(xiàn)類。Support包下包括中間數(shù)據(jù)池和控制器。Utils包為工具類。View包下放所有頁(yè)面的類。
根據(jù)登錄的業(yè)務(wù)需求結(jié)合項(xiàng)目的結(jié)構(gòu)?設(shè)計(jì)登錄的序列圖如圖3所示。
當(dāng)用戶在登錄Activity輸入登錄信息點(diǎn)擊確定后,LoginActivity先將登錄信息放入數(shù)據(jù)池,然后通知控制器調(diào)用業(yè)務(wù)層的登錄方法。業(yè)務(wù)層在接收到控制器的調(diào)用后從數(shù)據(jù)池中取出登錄信息并做處理,然后通知通訊模塊去調(diào)用服務(wù)器的登錄方法。通訊模塊負(fù)責(zé)調(diào)用服務(wù)器的登錄方法并將服務(wù)器返回的數(shù)據(jù)傳回給業(yè)務(wù)層,業(yè)務(wù)層再將數(shù)據(jù)放回到中間數(shù)據(jù)池。這時(shí)控制器從返回的數(shù)據(jù)判斷登錄方法執(zhí)行的狀態(tài)是成功還是出現(xiàn)異常。如果出現(xiàn)異常則給用戶進(jìn)行提示,如果正常跳轉(zhuǎn)到應(yīng)用首頁(yè),完成整個(gè)登錄操作。
在本文中敘述了安卓項(xiàng)目的MVC設(shè)計(jì)思想,以登錄為實(shí)例分析了如何將MVC設(shè)計(jì)思想應(yīng)用到實(shí)際的開發(fā)過程中。在安卓系統(tǒng)的開發(fā)結(jié)構(gòu)中應(yīng)用這種MVC設(shè)計(jì)模式,可以使開發(fā)人員的開發(fā)思路清晰,也使得系統(tǒng)各個(gè)模塊之間分工明確。應(yīng)用基于MVC開發(fā)模式的系統(tǒng)結(jié)構(gòu)可以極大地降低安卓應(yīng)用軟件后期維護(hù)難度,具有高可擴(kuò)展性。從而延長(zhǎng)了軟件的生命周期。
10.3969/j.issn.1001- 8972.2016.19.019