本發(fā)明涉及一種基于模型驅(qū)動(dòng)對(duì)Android移動(dòng)應(yīng)用進(jìn)行抽象提取交互流模型,使用針對(duì)Android平臺(tái)擴(kuò)展的IFML對(duì)其進(jìn)行建模。該模型能夠屏蔽Android平臺(tái)各版本間的復(fù)雜差異性,以直觀的方式展示Android移動(dòng)應(yīng)用的整體運(yùn)行控制流程,開(kāi)發(fā)人員可基于該模型結(jié)合不同的Android平臺(tái)版本進(jìn)行Android應(yīng)用開(kāi)發(fā),也可以很容易地能夠?qū)ndroid移動(dòng)應(yīng)用完成從一個(gè)版本向另外一個(gè)版本的遷移。本發(fā)明屬于軟件工程,模型驅(qū)動(dòng)工程領(lǐng)域。
背景技術(shù):
移動(dòng)應(yīng)用市場(chǎng)現(xiàn)如今蓬勃發(fā)展,發(fā)展速度極其迅速,移動(dòng)終端及其應(yīng)用徹底地改變了人們的生活方式,移動(dòng)應(yīng)用本身呈現(xiàn)出多平臺(tái)、多版本的態(tài)勢(shì),具有平臺(tái)多,版本演化快的特點(diǎn),如何更好并高效地支持多平臺(tái)、多版本的開(kāi)發(fā)是一個(gè)備受關(guān)注的問(wèn)題。Android是由Google發(fā)布,為移動(dòng)終端打造的開(kāi)放移動(dòng)開(kāi)發(fā)平臺(tái),短短幾年間Android原生系統(tǒng)便從1.1版本發(fā)展到目前(2016年5月)的5.1版本,隨著市場(chǎng)需求增長(zhǎng)和智能終端市場(chǎng)的快速成長(zhǎng),Android系統(tǒng)的更新迭代速度也會(huì)相應(yīng)加快以更好地適應(yīng)市場(chǎng)需求,此外,基于Android系統(tǒng)源碼進(jìn)行的二次開(kāi)發(fā),深度定制改版的移動(dòng)平臺(tái)操作系統(tǒng)也是Android發(fā)展的一個(gè)顯著趨勢(shì),因此可見(jiàn)Android系統(tǒng)版本演化之快之繁雜,各版本間的差異性非常復(fù)雜,Android移動(dòng)應(yīng)用也會(huì)隨著系統(tǒng)的變更不斷地進(jìn)行更新演化。模型是對(duì)具體實(shí)現(xiàn)的一種抽象,能夠有效地屏蔽各系統(tǒng)版本間的差異性,對(duì)一個(gè)移動(dòng)應(yīng)用抽象出模型并使用適當(dāng)?shù)慕UZ(yǔ)言刻畫(huà)描述,從而幫助開(kāi)發(fā)人員完成Android移動(dòng)應(yīng)用從一個(gè)版本向另外一個(gè)版本的遷移。
Android移動(dòng)應(yīng)用的開(kāi)發(fā)是基于MVC(模型-視圖-控制器)設(shè)計(jì)模式,移動(dòng)應(yīng)用項(xiàng)目源代碼中所有對(duì)象也是按照這三類(lèi)劃分為三部分,視圖層主要負(fù)責(zé)應(yīng)用的可視內(nèi)容呈現(xiàn)以及提供用戶(hù)操作的場(chǎng)所;控制器層和視圖層建立聯(lián)系,負(fù)責(zé)處理視圖層中用戶(hù)的操作,模型層中存放整個(gè)應(yīng)用的數(shù)據(jù)。
移動(dòng)應(yīng)用最大的特點(diǎn)就是可視化和頻繁的人機(jī)交互,移動(dòng)應(yīng)用是基于UI事件驅(qū)動(dòng)的,整個(gè)運(yùn)行流程主要是基于界面上的事件驅(qū)動(dòng)完成的,在Android系統(tǒng)各版本中都具有這個(gè)特點(diǎn)。移動(dòng)應(yīng)用的界面中包含了這個(gè)應(yīng)用的整體運(yùn)行控制流程,應(yīng)用都由若干界面組成,界面間存在一定的跳轉(zhuǎn)關(guān)系,每個(gè)界面中有若干可視化控件元素,用戶(hù)和這些可視化控件元素進(jìn)行人機(jī)交互,由此觸發(fā)事件,系統(tǒng)完成對(duì)事件的監(jiān)聽(tīng)處理從而完成用戶(hù)的交互意圖,事件的處理或者完成一定的業(yè)務(wù)邏輯運(yùn)算,或者觸發(fā)了界面間的跳轉(zhuǎn)。
IFML(The Interaction Flow Modeling Language)交互流建模語(yǔ)言,OMG(Object Management Group)制定的用于描述軟件應(yīng)用前端的內(nèi)容、用戶(hù)交互以及行為的建模語(yǔ)言。IFML作為OMG標(biāo)準(zhǔn)交互流建模語(yǔ)言,提供了擴(kuò)展機(jī)制,通過(guò)擴(kuò)展IFML使其能夠更好地用于描述移動(dòng)應(yīng)用的用戶(hù)界面及交互行為。IFML建立的交互流模型只能夠描述最通用的前端交互流信息,后來(lái)對(duì)其進(jìn)行的針對(duì)移動(dòng)平臺(tái)的擴(kuò)展,能夠用來(lái)刻畫(huà)描述與移動(dòng)平臺(tái)相關(guān)的模型,移動(dòng)平臺(tái)相關(guān)的模型能夠初步描述移動(dòng)平臺(tái)中的通用信息。我們需要進(jìn)一步對(duì)其進(jìn)行針對(duì)Android平臺(tái)的擴(kuò)展,從而建立Android平臺(tái)相關(guān)的模型,開(kāi)發(fā)人員基于屏蔽了版本差異的Android平臺(tái)相關(guān)模型,再結(jié)合開(kāi)發(fā)時(shí)Android版本,完成Android應(yīng)用的開(kāi)發(fā),后期隨著版本演化,基于模型可以完成從一個(gè)版本到另外一個(gè)版本的遷移。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的,針對(duì)目前移動(dòng)應(yīng)用開(kāi)發(fā)領(lǐng)域具有版本演化快的特點(diǎn),演化的深度會(huì)體現(xiàn)到API層次,甚至造成新老版本之間的API無(wú)法兼容的情況,這給程序員的開(kāi)發(fā)實(shí)現(xiàn)帶來(lái)了巨大的挑戰(zhàn)。如何能夠提供新的技術(shù)和方法來(lái)適應(yīng)這種系統(tǒng)平臺(tái)級(jí)別的快速演化,成為學(xué)術(shù)界和工業(yè)界都共同關(guān)注的問(wèn)題。傳統(tǒng)軟件開(kāi)發(fā)方式對(duì)此支持不夠,MDE通過(guò)劃分不同抽象層次的模型能有效地支持版本間的演化和遷移。IFML交互流建模語(yǔ)言是OMG提出的前端交互流建模規(guī)范。本發(fā)明目的是,針對(duì)Android平臺(tái)擴(kuò)展了IFML,并基于擴(kuò)展的IFML對(duì)Android應(yīng)用進(jìn)行抽象建立交互流模型,屏蔽各Android系統(tǒng)不同版本的復(fù)雜差異性,描述Android移動(dòng)應(yīng)用的整體運(yùn)行控制流程,開(kāi)發(fā)人員基于建立的交互流模型,結(jié)合實(shí)際開(kāi)發(fā)需求及Android具體版本信息,完成Android應(yīng)用開(kāi)發(fā)。本發(fā)明的主要目的還在于基于模型驅(qū)動(dòng),針對(duì)Android平臺(tái)的框架特點(diǎn)擴(kuò)展了IFML建模規(guī)范,并基于該擴(kuò)展提出一種用于Android移動(dòng)開(kāi)發(fā)進(jìn)行建模的方法。
技術(shù)方案:為完成上述目的,本發(fā)明采用的方案如下:
一種基于IFML的Android開(kāi)發(fā)建模方法,其特征是包括如下步驟:
1)當(dāng)IFML針對(duì)移動(dòng)平臺(tái)進(jìn)行擴(kuò)展,基于移動(dòng)平臺(tái)的擴(kuò)展需要針對(duì)Android平臺(tái)進(jìn)行擴(kuò)展,確定并抽象出Android平臺(tái)應(yīng)用的整體運(yùn)行流程;
11)確定Android應(yīng)用中整體運(yùn)行流程界面數(shù)量,界面間跳轉(zhuǎn)關(guān)系;
12)確定構(gòu)成整體運(yùn)行流程每個(gè)界面的控件類(lèi)型;
13)確定所述控件是否綁定事件,并確定事件類(lèi)型;
14)確定所述界面間跳轉(zhuǎn)由哪些控件觸發(fā)事件來(lái)完成;
2)使用交互流建模語(yǔ)言IFML針對(duì)移動(dòng)平臺(tái)的擴(kuò)展,對(duì)步驟1)中Android應(yīng)用整體運(yùn)行流程進(jìn)行初步交互流建模;
21)對(duì)Android應(yīng)用中整體運(yùn)行流程的界面,使用擴(kuò)展了IFML中ViewContainer得到的Screen表示;
22)對(duì)整體運(yùn)行流程界面中的控件,使用擴(kuò)展了IFML中ViewComponent得到的MobileComponent表示;
23)對(duì)表示整體運(yùn)行流程界面中的控件的MobileComponent,如果控件上綁定了事件,擴(kuò)展IFML中Event得到MobileSystemEvent,進(jìn)一步對(duì)MobileSystemEvent擴(kuò)展得到具體事件類(lèi)型,比如Click,使用具體事件類(lèi)型放在MobileComponent元素邊界上;
24)從整體運(yùn)行流程界面中的控件的MobileComponent上綁定的事件引出一條Navigation Flow,指向IFML中的Action元素,表示事件觸發(fā)后進(jìn)行的業(yè)務(wù)邏輯,再?gòu)腁ction元素繼續(xù)引出Navigation Flow,指向目的界面Screen,表示處理完業(yè)務(wù)邏輯后跳轉(zhuǎn)到哪個(gè)界面;
3)IFML針對(duì)移動(dòng)平臺(tái)擴(kuò)展,對(duì)Android應(yīng)用平臺(tái)進(jìn)行進(jìn)一步擴(kuò)展,使用針對(duì)Android應(yīng)用平臺(tái)擴(kuò)展的IFML,進(jìn)行面向?qū)崿F(xiàn)的交互流建模;
31)對(duì)Android應(yīng)用中的界面,使用IFML擴(kuò)展了的Screen得到的Activity元素表示;
32)對(duì)界面Activity中的控件,使用針對(duì)Android應(yīng)用平臺(tái)中基于MobileComponent元素?cái)U(kuò)展得到的各具體Android控件來(lái)表示,包括Button,TextView;
33)所述控件上綁定了事件,使用針對(duì)Android的基于MobileSystemEvent元素?cái)U(kuò)展得到的各具體Android事件來(lái)表示,包括Cl ick,Touch,LongPress;
34)從所述控件上綁定的事件引出一條Navigation Flow,指向表示事件處理業(yè)務(wù)邏輯的Action元素,從Aciton元素引出Navigation Flow指向目的Activity;
35)界面Activity元素間跳轉(zhuǎn)關(guān)系已經(jīng)使用擴(kuò)展了的IFML表示出來(lái),Activity間進(jìn)行跳轉(zhuǎn)時(shí)如果需要對(duì)涉及了跳轉(zhuǎn)的源Activity和目的Activity進(jìn)行生命周期方法的編碼,在源Activity和目的Activity的Navigation Flow間添加表示源Activity和目的Activity的UML類(lèi)圖;
4)對(duì)步驟3)中的Android應(yīng)用平臺(tái)的交互流模型,結(jié)合項(xiàng)目需求和Android版本信息,完成應(yīng)用開(kāi)發(fā);
41)對(duì)模型中界面Activity,在項(xiàng)目中添加一個(gè)Java類(lèi),繼承自Android中界面Activity類(lèi);
42)對(duì)界面中的Android控件,在項(xiàng)目布局資源目錄中添加各界面的布局文件,即在界面布局文件中添加Android控件;
43)步驟41)中的Java類(lèi),在生命周期方法onCreate()中完成界面加載和初始化設(shè)置等編碼工作,獲取控件,為控件綁定事件,完成事件處理業(yè)務(wù)邏輯,添加界面跳轉(zhuǎn)代碼。
有益效果:
本發(fā)明基于Android移動(dòng)應(yīng)用的IFML擴(kuò)展模型,結(jié)合不同Android平臺(tái)版本的信息,清晰直觀地完成Android應(yīng)用的開(kāi)發(fā),也很容易能夠完成從一個(gè)Android版本向另外一個(gè)版本的演化遷移。
本發(fā)明使用標(biāo)準(zhǔn)IFML對(duì)Android應(yīng)用的整體運(yùn)行流程中各種元素建立交互流模型,這個(gè)模型是粗粒度并且是高度抽象的,對(duì)標(biāo)準(zhǔn)IFML針對(duì)移動(dòng)平臺(tái)進(jìn)行擴(kuò)展,使用擴(kuò)展后的IFML再對(duì)模型進(jìn)行細(xì)化,這樣得到的模型便具有了移動(dòng)平臺(tái)的概念,體現(xiàn)出移動(dòng)平臺(tái)的特點(diǎn)。這個(gè)模型中包含的元素信息不足夠支撐Android開(kāi)發(fā),因此要進(jìn)一步針對(duì)Android平臺(tái)進(jìn)行IFML的擴(kuò)展,擴(kuò)展后對(duì)Android應(yīng)用運(yùn)行流程進(jìn)行描述刻畫(huà),這一步得到的模型信息能夠幫助Android開(kāi)發(fā)人員進(jìn)行應(yīng)用的開(kāi)發(fā)。通過(guò)對(duì)移動(dòng)應(yīng)用進(jìn)行抽象建立模型的方法,不僅可以用來(lái)屏蔽Android系統(tǒng)不同版本間的差異性,同樣能夠用來(lái)屏蔽不同移動(dòng)平臺(tái)間的差異性,從而幫助完成從一個(gè)移動(dòng)平臺(tái)模型向另外一個(gè)移動(dòng)平臺(tái)模型進(jìn)行轉(zhuǎn)換,再根據(jù)模型進(jìn)行代碼生成。
附圖說(shuō)明
圖1所示為針對(duì)Android平臺(tái)擴(kuò)展的IFML元模型;
圖2所示為一個(gè)Android應(yīng)用實(shí)例使用IFML建立的模型;
圖3所示為同一個(gè)Android應(yīng)用實(shí)例使用針對(duì)移動(dòng)平臺(tái)擴(kuò)展的IFML建立的模型;
圖4所示為針對(duì)Android平臺(tái)擴(kuò)展的IFML為Android應(yīng)用實(shí)例建立的交互流模型。
具體實(shí)施方式
下面對(duì)本發(fā)明做進(jìn)一步詳細(xì)說(shuō)明。
首先Android開(kāi)發(fā)人員確定將要開(kāi)發(fā)的Android應(yīng)用由多少界面組成以及界面間的跳轉(zhuǎn)關(guān)系,確定每個(gè)界面中包括了哪些Android控件,哪些控件需要綁定事件并且進(jìn)行事件處理,事件處理完后是否進(jìn)行界面間的跳轉(zhuǎn)。對(duì)Android應(yīng)用的整體運(yùn)行流程確定后,初步地使用標(biāo)準(zhǔn)IFML對(duì)Android應(yīng)用的整體運(yùn)行流程中各種元素建立交互流模型,這個(gè)模型是粗粒度并且是高度抽象的,對(duì)標(biāo)準(zhǔn)IFML針對(duì)移動(dòng)平臺(tái)進(jìn)行擴(kuò)展,使用擴(kuò)展后的IFML再對(duì)模型進(jìn)行細(xì)化,這樣得到的模型便具有了移動(dòng)平臺(tái)的概念,體現(xiàn)出移動(dòng)平臺(tái)的特點(diǎn)。這個(gè)模型中包含的元素信息不足夠支撐Android開(kāi)發(fā),因此要進(jìn)一步針對(duì)Android平臺(tái)進(jìn)行IFML的擴(kuò)展,擴(kuò)展后對(duì)Android應(yīng)用運(yùn)行流程進(jìn)行描述刻畫(huà),這一步得到的模型信息能夠幫助Android開(kāi)發(fā)人員進(jìn)行應(yīng)用的開(kāi)發(fā)。
1)確定并抽象出Android應(yīng)用的整體運(yùn)行流程。
Android應(yīng)用是UI和事件驅(qū)動(dòng)的,Android開(kāi)發(fā)人員在開(kāi)發(fā)一個(gè)Android應(yīng)用時(shí),首先要確定應(yīng)用的整體運(yùn)行流程,對(duì)Android應(yīng)用進(jìn)行抽象理解可以得知Android應(yīng)用以界面為單位,在各界面間進(jìn)行跳轉(zhuǎn)完成應(yīng)用的運(yùn)行流程,每個(gè)界面中放置合適的可視化控件元素呈現(xiàn)給用戶(hù),用戶(hù)可以與界面中控件元素進(jìn)行交互,應(yīng)用會(huì)處理用戶(hù)的交互操作完成功能、實(shí)現(xiàn)效果,交互過(guò)程中可能會(huì)觸發(fā)界面的跳轉(zhuǎn)。
Android開(kāi)發(fā)人員都知道Android應(yīng)用是使用面向?qū)ο笳Z(yǔ)言Java進(jìn)行開(kāi)發(fā),基于模型-控制器-視圖的MVC架構(gòu)模式進(jìn)行設(shè)計(jì),應(yīng)用中的任何對(duì)象,歸根結(jié)底都屬于模型對(duì)象、視圖對(duì)象以及控制器對(duì)象中的一種。視圖對(duì)象用于呈現(xiàn)可視化內(nèi)容給用戶(hù),并且和用戶(hù)進(jìn)行交互,響應(yīng)用戶(hù)的輸入,但是視圖對(duì)象不能夠處理用戶(hù)交互引發(fā)的事件,必須將視圖對(duì)象觸發(fā)的各類(lèi)事件信息發(fā)送給控制器對(duì)象,委托控制器對(duì)象去處理各類(lèi)事件。
Android中的控制器層是由Activity負(fù)責(zé)完成,每一個(gè)Activity都對(duì)應(yīng)一個(gè)Java文件。Activity的功能主要是:1.加載其關(guān)聯(lián)的視圖并且呈現(xiàn)給用戶(hù);2.獲取其關(guān)聯(lián)的視圖中每個(gè)控件,并負(fù)責(zé)處理控件響應(yīng)用戶(hù)與控件交互的操作。應(yīng)用中每個(gè)頁(yè)面都有相關(guān)聯(lián)的Activity,Activity具體是由Java編程語(yǔ)言結(jié)合Android API實(shí)現(xiàn),Activity作為Android中的四大組件之一,Android系統(tǒng)為其提供了7個(gè)生命周期方法,應(yīng)用的狀態(tài)發(fā)生變化時(shí),Android系統(tǒng)會(huì)自動(dòng)調(diào)用Activity相應(yīng)的生命周期方法,開(kāi)發(fā)人員可以在各個(gè)生命周期方法體中完成業(yè)務(wù)邏輯編碼便可以在生命周期方法被系統(tǒng)調(diào)用時(shí)實(shí)現(xiàn)預(yù)期的功能或效果。
移動(dòng)應(yīng)用中視圖和控制器密不可分,Activity負(fù)責(zé)加載與其關(guān)聯(lián)的視圖,如果應(yīng)用需要控件和用戶(hù)進(jìn)行交互,便會(huì)在Activity中對(duì)該控件設(shè)置事件處理方法,Android對(duì)事件的處理機(jī)制都是相同的:監(jiān)聽(tīng)事件源,為事件源綁定一個(gè)事件處理方法,事件發(fā)生則相應(yīng)的事件處理方法完成事件處理。此外,事件可能會(huì)引起界面間的跳轉(zhuǎn)。Android應(yīng)用是UI和事件驅(qū)動(dòng)的,開(kāi)發(fā)人員將為提供給用戶(hù)進(jìn)行交互的可視化控件綁定事件,系統(tǒng)會(huì)捕獲用戶(hù)交互產(chǎn)生的事件并對(duì)其進(jìn)行處理。
Android應(yīng)用的所有界面,界面中的控件,控件綁定事件及事件處理,界面間跳轉(zhuǎn)關(guān)系,這些信息就能夠清晰地表達(dá)出Android應(yīng)用的整體運(yùn)行流程,這個(gè)步驟得到的運(yùn)行控制流程和具體Android版本是無(wú)關(guān)的,屏蔽了各版本的復(fù)雜差異性。
2)使用IFML針對(duì)移動(dòng)平臺(tái)的擴(kuò)展,對(duì)步驟1中Android應(yīng)用整體運(yùn)行流程進(jìn)行初步交互流建模。
IFML是通用的交互流建模語(yǔ)言,使用標(biāo)準(zhǔn)沒(méi)有經(jīng)過(guò)擴(kuò)展的IFML可以對(duì)步驟1中的運(yùn)行控制流程進(jìn)行建模,但該模型僅停留在最原始抽象的交互流層級(jí),無(wú)法體現(xiàn)出移動(dòng)平臺(tái)的特點(diǎn),也不能詳細(xì)描述應(yīng)用的信息,對(duì)開(kāi)發(fā)人員的幫助不大。標(biāo)準(zhǔn)的IFML主要使用了以下元素進(jìn)行交互流建模:ViewContainer表示一個(gè)視圖容器,可用來(lái)容納可視化元素;ViewComponent表示可以存放于ViewContainer中的可視化元素,對(duì)用戶(hù)可見(jiàn)并且用戶(hù)可以與其進(jìn)行交互;Event表示交互流中的事件,通常附著在ViewComponent上表示該ViewComponent會(huì)產(chǎn)生事件,與Event緊密聯(lián)系在一起的是Action和Navigation Flow,Action表示事件產(chǎn)生后會(huì)進(jìn)行的業(yè)務(wù)邏輯,Navigation Flow表示了交互流的跳轉(zhuǎn)方向。當(dāng)使用標(biāo)準(zhǔn)IFML對(duì)Android應(yīng)用整體運(yùn)行流程進(jìn)行交互流建模時(shí),IFML中ViewContainer表示Android應(yīng)用中的界面,界面中的Android控件使用ViewComponent表示,控件如果需要綁定事件,則在ViewComponent上添加Event,從Event引出Navigation Flow,如果事件處理方法需要完成業(yè)務(wù)邏輯,則Navigation Flow和一個(gè)Action進(jìn)行關(guān)聯(lián),否則指向目的ViewContainer。圖1所示為一個(gè)Android應(yīng)用實(shí)例使用IFML建立的模型,該模型比較抽象而且粗粒度地描述了Android應(yīng)用的界面間跳轉(zhuǎn)關(guān)系,界面中有多少構(gòu)成元素,部分構(gòu)成元素綁定了事件,事件或者觸發(fā)了界面的跳轉(zhuǎn),或者完成一部分業(yè)務(wù)邏輯。
對(duì)IFML進(jìn)行針對(duì)移動(dòng)平臺(tái)的擴(kuò)展,使得IFML能夠進(jìn)行與移動(dòng)平臺(tái)相關(guān)的建模,擴(kuò)展重點(diǎn)主要在具有移動(dòng)平臺(tái)顯著特點(diǎn)的控件和事件類(lèi)型方面,移動(dòng)平臺(tái)的事件類(lèi)型主要分為了三大類(lèi):1.移動(dòng)終端所特有的傳感器引發(fā)的事件,比如晃動(dòng),加速器等;2.用戶(hù)使用移動(dòng)終端的外設(shè)引發(fā)的事件,比如攝像頭拍照,麥克風(fēng)等;3.用戶(hù)直接操作界面上控件引發(fā)的事件,比如點(diǎn)擊,滑動(dòng)等,可以基于Event擴(kuò)展出MobileSystemEvent,基于ViewContainer擴(kuò)展了Screen,這樣表述比較有移動(dòng)平臺(tái)特點(diǎn),Screen表示移動(dòng)應(yīng)用的界面,ViewComponent擴(kuò)展為具有移動(dòng)平臺(tái)相關(guān)概念的控件MobileComponent,表示這是移動(dòng)平臺(tái)的控件。使用針對(duì)移動(dòng)平臺(tái)進(jìn)行擴(kuò)展的IFML對(duì)Android應(yīng)用進(jìn)行交互流建模時(shí),Android應(yīng)用的界面使用Screen表示,界面中的Android控件使用MobileComponent表示,控件上綁定的事件則根據(jù)具體事件類(lèi)型來(lái)表示,比如單擊Click。圖2所示為同一個(gè)Android應(yīng)用實(shí)例使用針對(duì)移動(dòng)平臺(tái)擴(kuò)展的IFML建立的模型,這部分的擴(kuò)展能夠描述有移動(dòng)平臺(tái)概念的信息。
3)針對(duì)IFML的移動(dòng)平臺(tái)擴(kuò)展進(jìn)一步針對(duì)Android平臺(tái)進(jìn)行擴(kuò)展,使用針對(duì)Android擴(kuò)展的IFML進(jìn)行面向?qū)崿F(xiàn)的交互流建模。
步驟2)中的交互流模型能夠描述出移動(dòng)應(yīng)用相關(guān)的運(yùn)行交互流過(guò)程,我們進(jìn)一步擴(kuò)展針對(duì)移動(dòng)平臺(tái)的IFML使得能夠建立Android平臺(tái)相關(guān)的交互流模型。對(duì)比Android各版本中的控件類(lèi)型和事件類(lèi)型,發(fā)現(xiàn)控件和事件類(lèi)型基本上沒(méi)有改變,因此我們可以擴(kuò)展IFML中的MobileComponent,在IFML中擴(kuò)充Android的控件,比如Button,TextView等。MobileComponent和Android控件的關(guān)系類(lèi)似于面向?qū)ο笳Z(yǔ)言中父類(lèi)和子類(lèi)的關(guān)系,當(dāng)開(kāi)發(fā)人員不確定某個(gè)界面中需要使用哪個(gè)控件時(shí),完全可以先使用MobileComponent來(lái)代替,等最終開(kāi)發(fā)確定時(shí)再用具體Android控件替換MobileComponent。擴(kuò)展MobileSystemEvent添加Android中的事件類(lèi)型比如Click,Touch等。Android中Activity和視圖層是緊密聯(lián)系的,視圖層的業(yè)務(wù)邏輯都交由控制器Activity處理,因此我們將Screen擴(kuò)展為Activity。在步驟1)中我們提到,當(dāng)Activity進(jìn)行切換,應(yīng)用狀態(tài)發(fā)生改變時(shí),Android系統(tǒng)會(huì)自動(dòng)調(diào)用提供給Activity的7個(gè)生命周期方法,開(kāi)發(fā)人員可以在生命周期方法體中完成業(yè)務(wù)邏輯編碼便能夠在生命周期方法被系統(tǒng)調(diào)用時(shí)實(shí)現(xiàn)預(yù)期功能。步驟2中的模型無(wú)法描述這部分與Android平臺(tái)緊密相關(guān)的信息,為此我們需要添加新元素刻畫(huà)這部分信息。IFML是可以結(jié)合UML(Unified Modeling Language)建模語(yǔ)言完成應(yīng)用中不能直接通過(guò)界面或交互流來(lái)表述的部分。我們選擇使用UML中的類(lèi)圖和協(xié)作圖作為新元素,步驟1中提到Activity對(duì)應(yīng)Java文件,完全可以使用UML類(lèi)圖和協(xié)作圖來(lái)在IFML中表示Activity中的生命周期方法。同樣地,由于Android控件綁定的事件引起的事件處理方法,也可以使用UML類(lèi)圖和協(xié)作圖的新元素表述。
經(jīng)過(guò)針對(duì)Android平臺(tái)的IFML擴(kuò)展后,我們可以這樣來(lái)描述Android應(yīng)用的整體運(yùn)行控制流程:使用Activity表示應(yīng)用中的界面,在Activity中添加Android控件,給控件綁定Android事件,事件通過(guò)Navigation Flow和Action聯(lián)系起來(lái),Action部分由開(kāi)發(fā)人員具體去實(shí)現(xiàn),完成Action后,Navigation Flow要么指向原來(lái)的界面表示實(shí)現(xiàn)了功能、完成效果,要么指向Activity,如果指向其他的Activity,則需要添加Activity生命周期方法,生命周期方法體中的內(nèi)容交由開(kāi)發(fā)人員決定是否添加。通過(guò)這些步驟,Android應(yīng)用的整體交互運(yùn)行流程便建模完成。圖3所示為針對(duì)Android平臺(tái)擴(kuò)展的IFML為Android應(yīng)用實(shí)例建立的交互流模型。
4)基于步驟3)中的Android交互流模型,結(jié)合Android具體版本,如有需要只對(duì)Android控件類(lèi)型進(jìn)行調(diào)整,開(kāi)發(fā)人員對(duì)照模型可以直接在Android項(xiàng)目源代碼中完成應(yīng)用的所有界面,界面中控件,界面對(duì)應(yīng)的Activity,控件綁定的事件,界面如何跳轉(zhuǎn)及跳轉(zhuǎn)關(guān)系。Android開(kāi)發(fā)人員看到模型中的Activity,為此Activity在項(xiàng)目中添加一個(gè)Java類(lèi),看到模型中Activity里的控件可以在Activity關(guān)聯(lián)的界面中進(jìn)行添加,模型中控件上綁定了事件及進(jìn)行了事件處理,直接可以在Activity中捕獲控件并對(duì)控件進(jìn)行事件綁定。