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