• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      MVC模式在Android開發(fā)上的應(yīng)用研究

      2017-03-16 10:40:05劉娜劉如起
      山東工業(yè)技術(shù) 2017年3期

      劉娜+劉如起

      摘 要:根據(jù)Android應(yīng)用開發(fā)語(yǔ)言Java的特點(diǎn)以及MVC模式的思想,提出一種基于注解的MVC模式,可用于Android應(yīng)用的快速開發(fā)中,并根據(jù)Android跨進(jìn)程應(yīng)用的特點(diǎn),提出一種解決方案,可使MVC模式用于跨進(jìn)程應(yīng)用中。

      關(guān)鍵詞:Android;Java;MVC;注解;AIDL

      DOI:10.16640/j.cnki.37-1222/t.2017.03.118

      隨著搭載Android系統(tǒng)的智能設(shè)備的普及,對(duì)Android應(yīng)用的需求也越來(lái)越大,需要一種好的設(shè)計(jì)模式提高開發(fā)的效率。MVC(模型-視圖-控制器)設(shè)計(jì)模式將數(shù)據(jù)和表現(xiàn)進(jìn)行分離,既可以使數(shù)據(jù)以不同的形式表現(xiàn),又可以方便的更換數(shù)據(jù)來(lái)源從而提高開發(fā)效率。由于Android系統(tǒng)以Java語(yǔ)言做為上層開發(fā)語(yǔ)言,本文基于MVC設(shè)計(jì)模式思想以及Java語(yǔ)言的特點(diǎn),提出了一種基于注解的MVC開發(fā)框架,可大大簡(jiǎn)化應(yīng)用程序設(shè)計(jì)。又根據(jù)Android應(yīng)用程序的特點(diǎn),提出了一種針對(duì)跨進(jìn)程應(yīng)用使用該框架的方案,提高了框架的適用性。

      1 MVC模式簡(jiǎn)介

      MVC設(shè)計(jì)模式是一種“分治”的思想,它將模型和視圖分離,從而使同一組數(shù)據(jù)可以使用不同的表現(xiàn)形式。MVC由三部分組成:模型(Model),視圖(View)及控制器。模型即數(shù)據(jù)來(lái)源,負(fù)責(zé)數(shù)據(jù)的生成及相關(guān)邏輯處理,視圖是模型的外在表現(xiàn),一個(gè)模型可以對(duì)應(yīng)一個(gè)或多個(gè)視圖。視圖是應(yīng)用程序與外界輸入的接口??刂破魇悄P秃鸵晥D聯(lián)系的紐帶,一方面將外界輸入交給模型處理,另一方面又將模型處理好的數(shù)據(jù)交給視圖來(lái)表現(xiàn),使模型和視圖同步更新。

      在MVC設(shè)計(jì)模式中,三個(gè)層次作用清晰,各司其職,互不干涉,某一層的需求發(fā)生變化,只需要修改相應(yīng)層而不會(huì)影響到其他層。同時(shí)分層設(shè)計(jì)也利于組件的重用和功能的擴(kuò)展,可以很方便的用不同的視圖來(lái)顯示數(shù)據(jù),從而使系統(tǒng)能輕松支持新的邏輯模塊和視圖顯示。因此,在開發(fā)中使用MVC設(shè)計(jì)模式具有顯著的優(yōu)勢(shì)。

      2 MVC模式的實(shí)現(xiàn)

      使用觀察者模式來(lái)實(shí)現(xiàn)MVC框架。 實(shí)現(xiàn)步驟:

      (1)定義抽象類Subjecter,持有觀察者類的對(duì)象。(2)定義抽象類IModel繼承Subjecter,作為模型的基類。(3)定義抽象類IView繼承Subjecter,作為視圖的基類。(4)定義抽象類IController,作為控制器,作為模型和視圖之間的紐帶,控制器類同時(shí)持有模型和視圖對(duì)象。(5)定義觀察者Observer,觀察者持有控制器對(duì)象。通過(guò)以上定義可以看到,模型和視圖持有觀察者對(duì)象,觀察者又持有控制器對(duì)象,而在控制器又同時(shí)持有模型和視圖對(duì)象。這樣一旦模型的數(shù)據(jù)發(fā)生變化就可以通知觀察者,觀察者使用控制器來(lái)通知視圖進(jìn)行更新。而觀察者中的控制器和控制器中的視圖都是可以方便的更換,從而通過(guò)不同的控制器就實(shí)現(xiàn)了模型和視圖的分離,也就是MVC模式。

      3 使用注解進(jìn)行優(yōu)化

      建立了MVC模式之后,通過(guò)繼承IModel,IView,IController就可以使用MVC模式來(lái)進(jìn)行開發(fā)了,但是在模型里面每多一種變化,相應(yīng)的在控制器和視圖里面就要增加代碼來(lái)通知視圖和響應(yīng)這種變化,從編程的角度來(lái)看這些響應(yīng)過(guò)程其實(shí)就是調(diào)用視圖類相應(yīng)的方法,在傳統(tǒng)的編程中需要先在視圖中定義方法,然后在控制器中調(diào)用。所以簡(jiǎn)化的關(guān)鍵是實(shí)現(xiàn)動(dòng)態(tài)調(diào)用方法。JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性。由于Java反射機(jī)制是基于方法名或變量名的字符串來(lái)實(shí)現(xiàn)的??梢允褂米址鎯?chǔ)視圖里面的方法名,然后控制器讀取字符串也就是方法名再通過(guò)反射來(lái)調(diào)用相應(yīng)的方法。注解(Annotation),也叫元數(shù)據(jù)。可以聲明在包、類、字段、方法、局部變量、方法參數(shù)等的前面,用來(lái)對(duì)這些元素進(jìn)行說(shuō)明,注釋。注解可以通過(guò)反射來(lái)獲取。這樣就可以把模型的變化定義為一個(gè)字符串類型的動(dòng)作,給視圖的相應(yīng)方法加上以這個(gè)動(dòng)作為值的注解,然后在控制器里面讀取相應(yīng)的注解,從而使模型的變化與視圖的響應(yīng)方法自動(dòng)的對(duì)應(yīng)起來(lái),這樣就減少了代碼量,更易于使用。

      基于上面的思路,首先定義注解:

      @Target({ ElementType.METHOD })

      @Retention(RetentionPolicy.RUNTIME)

      public @interface MVCAction {

      String value() default "";

      }

      注解設(shè)定為可以使用在方法上,并且在運(yùn)行時(shí)存在。

      接下來(lái)的關(guān)鍵就是解析注解,在IView里面編寫一個(gè)注解解析器,并將解析到的動(dòng)作名與被該動(dòng)作所注解的方法的名字一一對(duì)應(yīng)保存在列表中,這樣當(dāng)模型數(shù)據(jù)發(fā)生變化就通過(guò)控制器向視圖發(fā)送動(dòng)作,在控制里面通過(guò)動(dòng)作得到視圖里面的方法名進(jìn)而通過(guò)反射得到對(duì)應(yīng)方法。從而簡(jiǎn)化了模型,視圖及控制器類的定義,通過(guò)盡可能的重用代碼減小了代碼的復(fù)雜度,從而達(dá)到快速開發(fā)的效果。

      4 在Android中應(yīng)用

      在很多Android應(yīng)用場(chǎng)景中,一個(gè)完整的應(yīng)用是由客戶端與服務(wù)來(lái)實(shí)現(xiàn)的,這樣就可以把客戶端當(dāng)作視圖,服務(wù)當(dāng)作模型來(lái)使用MVC架構(gòu)了。但是有很多應(yīng)用的客戶端與服務(wù)要運(yùn)行在不同的進(jìn)程里面,不能直接使用傳統(tǒng)的MVC框架。這時(shí)可以把模型分成兩部分:客戶端的本地模型和服務(wù)端的遠(yuǎn)程模型,本地模型作為遠(yuǎn)程模型的代理與視圖和控制器組成MVC架構(gòu)。同時(shí)本地模型和遠(yuǎn)程模型通過(guò)AIDL接口進(jìn)行通訊:遠(yuǎn)程模型把將方法信息和打包后的參數(shù)傳遞給本地模型。(1) 對(duì)參數(shù)統(tǒng)一化:把任意數(shù)量,任意類型的參數(shù)打包并實(shí)現(xiàn)Parcelable接口以通過(guò)AIDL進(jìn)行傳遞。(2) 通過(guò)AIDL和遠(yuǎn)程回調(diào)實(shí)現(xiàn)遠(yuǎn)程模型和本地模型通訊。這樣通過(guò)封裝的接口和遠(yuǎn)程回調(diào)就可以對(duì)用戶隱藏本地模型和遠(yuǎn)程模型之間的聯(lián)系,從而可以像本地通訊一樣在跨進(jìn)程的應(yīng)用中使用MVC架構(gòu)。

      5 總結(jié)

      本文通過(guò)觀察者模式實(shí)現(xiàn)了一個(gè)輕量級(jí)的MVC框架,并通過(guò)反射和注解對(duì)框架中的核心部分進(jìn)行了優(yōu)化,從而方便使用。并結(jié)合Android系統(tǒng)的應(yīng)用環(huán)境進(jìn)行分析并擴(kuò)展從而能方便的使用MVC框架。通過(guò)在Android應(yīng)用中使用MVC模式可以使應(yīng)用結(jié)構(gòu)清晰,可以視圖層和模型層分別開發(fā),二者的交互交給MVC框架來(lái)完成。同時(shí)便于后期維護(hù),在模型層不變的情況下可以任意的更換視圖層從而達(dá)到快速開發(fā)的效果。

      參考文獻(xiàn):

      [1]閆術(shù)卓,楊強(qiáng).Struts2技術(shù)詳解:基于WebWork核心的MVC開發(fā)與實(shí)踐[M].電子工業(yè)出版社,2008.

      [2]李春紅,高建華.使用分層模型改進(jìn)MVC設(shè)計(jì)架構(gòu)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007(04).

      [3]陳云芳.精通Struts2:基于MVC的JavaWeb應(yīng)用開發(fā)實(shí)戰(zhàn)[M].人民郵電出版社,2008.

      [4]冉春玉,白炳杉.MVC模式及struts框架應(yīng)用研究[J].武漢理工大學(xué)學(xué)報(bào).

      [5]Bruce Eckel .Thinking in java(java編程思想)第四版[M].北京:機(jī)械工業(yè)出版社,2011.

      [6]劉衛(wèi)國(guó),姚昱禹.Android的架構(gòu)與應(yīng)用開發(fā)研究[J].中南大學(xué):信息科學(xué)與工程學(xué)院計(jì)算機(jī)系統(tǒng)應(yīng)用,2008(11):110-112.

      绍兴市| 靖宇县| 武威市| 太白县| 句容市| 旌德县| 临汾市| 凌云县| 浦江县| 长汀县| 凉城县| 道孚县| 韩城市| 甘孜县| 色达县| 山东| 甘泉县| 武安市| 中卫市| 青冈县| 上饶市| 喀喇| 鹤壁市| 石嘴山市| 六盘水市| 法库县| 桑植县| 托克托县| 汝城县| 九龙坡区| 库尔勒市| 宜宾市| 邢台市| 句容市| 乌恰县| 米泉市| 张掖市| 华池县| 新建县| 泗阳县| 纳雍县|