吳昊



摘要:基于模型的用戶(hù)界面開(kāi)發(fā)方法是解決多設(shè)備環(huán)境下用戶(hù)界面開(kāi)發(fā)問(wèn)題的一個(gè)常用方法。然而,當(dāng)前主要的開(kāi)發(fā)方法中存在著多種問(wèn)題。本文提出的基于模型的用戶(hù)界面開(kāi)發(fā)方法,主要包括領(lǐng)域模型、任務(wù)模型和界面模型,對(duì)應(yīng)于MVC模式中領(lǐng)域模型、控制模型和視圖模型。由于在模型設(shè)計(jì)階段隱含了交互式系統(tǒng)的體系結(jié)構(gòu),因而不僅能保證系統(tǒng)的有用性和可用性,而且模型向界面工具箱編碼的轉(zhuǎn)化簡(jiǎn)單直接。從而有效的解決了一些主要的開(kāi)發(fā)方法中存在的問(wèn)題。
關(guān)鍵詞:基于模型的用戶(hù)界面開(kāi)發(fā);多設(shè)備用戶(hù)界面;MVC模式;卡梅隆參考框架;人機(jī)交互
中圖分類(lèi)號(hào):TP311.5
文獻(xiàn)標(biāo)識(shí)碼:A
DOI:10.3969/j.issn.1003-6970.2015.08.002
0 引言
隨著普適計(jì)算、云計(jì)算等新型計(jì)算模式的發(fā)展,計(jì)算設(shè)備呈現(xiàn)出日益多樣性、異構(gòu)化的特征。手動(dòng)為具有不同交互特點(diǎn)的設(shè)備開(kāi)發(fā)不同的用戶(hù)界面版本,難以開(kāi)發(fā)出風(fēng)格一致且具有相同的可用性的用戶(hù)界面,也帶來(lái)了巨大的工作量和商業(yè)成本。目前,克服這一困難普遍認(rèn)可的方法是基于模型的用戶(hù)界面開(kāi)發(fā)(MBUID),也就是使用模型從高層抽象出用戶(hù)界面的特征,然后再將其映射為各種不同平臺(tái)上的最終界面,達(dá)到自動(dòng)或者半自動(dòng)的生成用戶(hù)界面的目的。這一方法是當(dāng)前人機(jī)交互中的一個(gè)研究和應(yīng)用熱點(diǎn)。
通過(guò)對(duì)目前存在的大量的MBUID方法的研究發(fā)現(xiàn),大多數(shù)MBUID側(cè)重于界面呈現(xiàn)給用戶(hù)的外觀(guān)方面即表示、行為模型的抽象及轉(zhuǎn)換,而忽視了或者較少提及功能核心以及功能核心和界面之間的通信控制部分對(duì)界面構(gòu)建的影響,而就本質(zhì)而言,用戶(hù)界面對(duì)構(gòu)建運(yùn)行時(shí)系統(tǒng)是不充分的。因而,一方面,在系統(tǒng)設(shè)計(jì)階段,系統(tǒng)的體系結(jié)構(gòu)和用戶(hù)界面模型之間存在著較大的間隔。另一方面,在代碼設(shè)計(jì)時(shí),自動(dòng)生成的用戶(hù)界面難以很自然的和有著一定體系結(jié)構(gòu)的用戶(hù)界面工具箱(如Java Swing,asp.net,QT等)融為一體。從而交互式系統(tǒng)的有用性和可用性難以得到全面有效的保證。
本文以流行的體系結(jié)構(gòu)模式MVC為例,提出將其與在MDUID中得到廣泛應(yīng)用的卡梅隆參考框架結(jié)合起來(lái)進(jìn)行用戶(hù)界面的開(kāi)發(fā)方法,其核心思想是在模型設(shè)計(jì)階段就充分考慮最終實(shí)現(xiàn)時(shí)界面工具箱的體系結(jié)構(gòu),從而能夠很好的解決上述問(wèn)題。
1 相關(guān)工作
使用基于模型的方法開(kāi)發(fā)交互式系統(tǒng),通過(guò)一系列模型來(lái)抽象和構(gòu)建用戶(hù)界面的相關(guān)部分,避免在設(shè)計(jì)階段過(guò)多介入設(shè)備和環(huán)境的技術(shù)細(xì)節(jié),而集中于設(shè)計(jì)用戶(hù)界面的語(yǔ)法部分,可以提高用戶(hù)界面的生產(chǎn)效率和質(zhì)量。Dygimes是一個(gè)可以為移動(dòng)設(shè)備和嵌入式系統(tǒng)自動(dòng)生成用戶(hù)界面的運(yùn)行時(shí)環(huán)境,采用了用戶(hù)為中心的方法,類(lèi)似于我們的方法,使用并發(fā)任務(wù)樹(shù)(CTT)從任務(wù)規(guī)格開(kāi)始設(shè)計(jì)用戶(hù)界面。TERESA是一種轉(zhuǎn)換方法,同我們的方法類(lèi)似,根據(jù)卡梅隆參考框架構(gòu)建,并遵從一個(gè)正向的工程過(guò)程。TansformiXML是一個(gè)基于屬性圖文法的UsiXML工具,該工具對(duì)于不同的使用上下文在同一抽象層次對(duì)模型進(jìn)行轉(zhuǎn)換。然而這些方法除了存在具有一個(gè)陡峭的學(xué)習(xí)曲線(xiàn)、模型過(guò)于繁雜難以維護(hù)、不易支持不斷變化的用戶(hù)界面需求等問(wèn)題外,一個(gè)比較突出的問(wèn)題是缺乏一個(gè)與功能核心良好集成的機(jī)制。本文的方法旨在對(duì)上述問(wèn)題的解決作以探索性研究。
多數(shù)基于模型的方法都使用用戶(hù)界面描述語(yǔ)言(UIDL)作為工具描述其構(gòu)建的模型,例如TERESA和TransformXML。UIDL是模型自動(dòng)轉(zhuǎn)換的基礎(chǔ)。本文作者開(kāi)發(fā)了一個(gè)用戶(hù)界面描述語(yǔ)言MDUIDL,該UIDL是本文提出的開(kāi)發(fā)方法使用工具之一。
2 開(kāi)發(fā)方法的框架
一個(gè)好的交互式系統(tǒng)首先要提供完整的功能,完全滿(mǎn)足用戶(hù)的需求,才能成為一個(gè)有用的系統(tǒng)。另外還要具有美觀(guān)易用的界面,使用戶(hù)具有良好的用戶(hù)體驗(yàn),才能保證商業(yè)上的成功。有用性和可用性二者缺一不可。為了保證有用性,應(yīng)從用戶(hù)的需求出發(fā),以用戶(hù)為中心,構(gòu)建出充分考慮界面、功能及二者之間的通信與控制的體系結(jié)構(gòu)。為了保證可用性,一般從用戶(hù)的任務(wù)出發(fā),依據(jù)用戶(hù)使用系統(tǒng)時(shí)需要完成的目標(biāo)導(dǎo)出用戶(hù)將如何使用界面,完成界面的觀(guān)與感的設(shè)計(jì)。但是二者在開(kāi)發(fā)中應(yīng)該是渾然一體的,不能割裂開(kāi)來(lái)。否則,將會(huì)導(dǎo)致生產(chǎn)出有用性完整但是可用性差或者可用性高但有用性不完整的系統(tǒng),或者因?yàn)榻缑婧凸δ芎诵臒o(wú)法高效連接而產(chǎn)生笨拙低效甚至失敗的系統(tǒng)。
本文提出的MBUID方法的框架如圖1所示,其核心是模型集合,包含三種主要的模型:領(lǐng)域模型對(duì)功能核心進(jìn)行建模,它相當(dāng)于MVC中的模型部分;任務(wù)模型對(duì)用戶(hù)任務(wù)建模,在實(shí)現(xiàn)中表現(xiàn)為對(duì)領(lǐng)域模型和界面模型之間的交互進(jìn)行控制,相當(dāng)于MVC中的控制部分。為了簡(jiǎn)化程序設(shè)計(jì),本方法的特色之一是對(duì)任務(wù)模型中常用的功能構(gòu)建相應(yīng)于編程語(yǔ)言的類(lèi)庫(kù);界面模型對(duì)用戶(hù)界面建模,分為抽象模型和具體模型,相當(dāng)于MVC中的視圖部分。具體模型經(jīng)MDUIDL代碼生成引擎轉(zhuǎn)化為相應(yīng)的最終界面。模型集合中的大部分模型都可以用我們開(kāi)發(fā)的用戶(hù)界面描述語(yǔ)言MDUIDL表示。
模型集合中包含了卡梅隆參考框架的所有模型,但突出了領(lǐng)域模型和任務(wù)模型的重要性,同時(shí)和MVC模式無(wú)縫的集成在一起。此外,該方法還有有以下特點(diǎn):集中考慮交互式系統(tǒng)的體系結(jié)構(gòu),同時(shí)顧及領(lǐng)域模型、用戶(hù)任務(wù)模型和用戶(hù)界面模型的開(kāi)發(fā)并周密設(shè)計(jì)三者之間的關(guān)系與連接,從而充分的保證系統(tǒng)的有用性和可用性;熟悉該方法的開(kāi)發(fā)者可以從這三種模型的任何一個(gè)開(kāi)始開(kāi)發(fā)系統(tǒng),沒(méi)有順序上的限制,甚至可以并行開(kāi)發(fā),都能保證設(shè)計(jì)出一個(gè)功能和界面無(wú)縫結(jié)合的系統(tǒng);由于從設(shè)計(jì)時(shí)采用了MVC體系結(jié)構(gòu),系統(tǒng)從設(shè)計(jì)到實(shí)現(xiàn)的過(guò)渡是自然的,可以方便的把設(shè)計(jì)時(shí)的說(shuō)明性模型自動(dòng)或者半自動(dòng)的轉(zhuǎn)化為系統(tǒng)的功能部分。
3 開(kāi)發(fā)方法的設(shè)計(jì)
3.1 領(lǐng)域模型設(shè)計(jì)
領(lǐng)域模型對(duì)功能核心進(jìn)行建模,它相當(dāng)于一個(gè)功能核心適配器(Adapter),把功能核心和用戶(hù)界面需要交互的數(shù)據(jù)包裝起來(lái)。領(lǐng)域模型用MDUIDL的EDL部分表示。
3.2 任務(wù)模型及編程語(yǔ)言類(lèi)庫(kù)設(shè)計(jì)
任務(wù)建模的主要目的是抽象出為了實(shí)現(xiàn)用戶(hù)目標(biāo)而需要執(zhí)行的邏輯活動(dòng)(任務(wù))、這些活動(dòng)之間的關(guān)系以及活動(dòng)所操控的領(lǐng)域數(shù)據(jù)和界面元素。我們利用ConcurTaskTree( CTT)作為任務(wù)的標(biāo)記方法。CTT認(rèn)為在高級(jí)層次上任務(wù)是目標(biāo),低級(jí)層次上任務(wù)是交互,而且它支持設(shè)計(jì)任意復(fù)雜程度的應(yīng)用。從任務(wù)角度分析應(yīng)用系統(tǒng),可以在隨后的設(shè)計(jì)活動(dòng)中維持系統(tǒng)的可用性。
與一般基于CTT的界面開(kāi)發(fā)中從CTT導(dǎo)出用戶(hù)界面模型的方式有所不同,我們的方法中,任務(wù)模型除了表征任務(wù)及任務(wù)之間的關(guān)系外,它還作為未來(lái)交互式系統(tǒng)的一個(gè)有機(jī)部分,在MVC結(jié)構(gòu)的程序中指導(dǎo)著控制器的生成,負(fù)責(zé)領(lǐng)域模型和界面模型之間的對(duì)話(huà)與控制。這樣,使得模型集合到最終系統(tǒng)的生成有著直接的映射關(guān)系。為此,我們對(duì)CTT進(jìn)行了必要的擴(kuò)充,在CTT的非葉節(jié)點(diǎn)加入狀態(tài)元素。該元素中登記了領(lǐng)域模型中的數(shù)據(jù)類(lèi)型或者界面模型中的元素類(lèi)型的實(shí)例,從而建立起兩者之間的連接關(guān)系。當(dāng)CTT中的葉子節(jié)點(diǎn)(應(yīng)用任務(wù)、交互任務(wù))被激活時(shí),它用中序遍歷查找到其上層祖先節(jié)點(diǎn)中的狀態(tài)元素,從而操控狀態(tài)元素連接的領(lǐng)域數(shù)據(jù)或者界面元素。
為了簡(jiǎn)化程序的設(shè)計(jì)和編寫(xiě),我們把擴(kuò)充的CTT任務(wù)模型到編程語(yǔ)言的映射中常用的功能設(shè)計(jì)成編程語(yǔ)言類(lèi)庫(kù)。目前實(shí)現(xiàn)了Java語(yǔ)言的編程類(lèi)庫(kù),其結(jié)構(gòu)如圖2所示。其中,抽象任務(wù)是其它任務(wù)的父類(lèi),它包含其它任務(wù)的共有操作。組合任務(wù)是任務(wù)樹(shù)中的非葉子節(jié)點(diǎn),起著組織管理作用。它對(duì)任務(wù)的組織是依據(jù)CTT規(guī)定的八種時(shí)序關(guān)系對(duì)應(yīng)而來(lái),擁有八個(gè)相應(yīng)的子類(lèi)。這些子類(lèi)負(fù)責(zé)對(duì)任務(wù)樹(shù)中其后代節(jié)點(diǎn)進(jìn)行管理,例如,T1和T2為EnalbeTask的后代,則只有當(dāng)T1發(fā)出teminate信號(hào)后,T2才能進(jìn)行activate操作。組合任務(wù)可以和用戶(hù)界面里的一個(gè)容器部件關(guān)聯(lián)起來(lái),表明該任務(wù)和這個(gè)容器有著通信關(guān)系。它還可以包括狀態(tài)元素。應(yīng)用任務(wù)一般涉及和領(lǐng)域模型進(jìn)行數(shù)據(jù)交互,而交互任務(wù)和界面模型中的元素有著對(duì)應(yīng)關(guān)系。應(yīng)用任務(wù)和交互任務(wù)都可以和界面里的一個(gè)具體交互元素(如按鈕,標(biāo)簽等)關(guān)聯(lián)起來(lái)。
3.3 界面模型設(shè)計(jì)
界面模型描述界面的外觀(guān)和行為。它可以分為抽象界面模型和具體界面模型。
3.3.1 抽象界面模型
抽象界面模型不涉及界面的交互模態(tài)、用戶(hù)偏好、平臺(tái)類(lèi)型和編程語(yǔ)言等使用上下文,是用戶(hù)界面的抽象表示。它分類(lèi)界面元素的交互類(lèi)型,并把它們根據(jù)一定的結(jié)構(gòu)組織起來(lái)。在我們的工作中,定義了八種交互類(lèi)型:輸入、輸出、選擇、修改、創(chuàng)建、銷(xiāo)毀、開(kāi)始和結(jié)束。抽象界面模型表現(xiàn)為一個(gè)森林結(jié)構(gòu)。森林中的每棵樹(shù)的非葉節(jié)點(diǎn)都用一個(gè)Group節(jié)點(diǎn)來(lái)表示,葉子節(jié)點(diǎn)為某種交互類(lèi)型。抽象用戶(hù)界面模型用MDUIDL的AIDL描述。
3.3.2 具體界面模型
具體界面模型描述了在某種使用上下文中的用戶(hù)界面模型。它從抽象界面模型轉(zhuǎn)化而來(lái),其轉(zhuǎn)化規(guī)則用MDUIDL的SIDL表示。SIDL類(lèi)似于一個(gè)樣式表,它把AIDL的結(jié)構(gòu)和交互類(lèi)型具體化為具有一定組織特征的工具箱級(jí)的界面元素。例如一個(gè)OUT交互類(lèi)型可以轉(zhuǎn)化為HTML中的一行文本,或者Java Swing中的一個(gè)JLabel。轉(zhuǎn)化后的具體界面模型用MDUIDL的DIDL表示,DIDL可以進(jìn)一步轉(zhuǎn)化為最終的界面。
3.4 三個(gè)模型之間的連接
三個(gè)模型之間可以?xún)蓛蛇M(jìn)行連接。連接關(guān)系主要通過(guò)任務(wù)模型的狀態(tài)元素完成(領(lǐng)域模型直接和界面模型連接除外)。例如,領(lǐng)域模型和任務(wù)模型中的某個(gè)應(yīng)用任務(wù)進(jìn)行連接時(shí),在該應(yīng)用任務(wù)的父節(jié)點(diǎn)上產(chǎn)生一個(gè)狀態(tài)元素,領(lǐng)域模型中的數(shù)據(jù)和這個(gè)狀態(tài)元素任何一方變化時(shí),都將導(dǎo)致對(duì)方產(chǎn)生相應(yīng)的變化和操作。另外,在設(shè)計(jì)階段,一個(gè)模型中的元素可以導(dǎo)致其它模型中元素的生成。例如,任務(wù)模型中的一個(gè)交互任務(wù)已經(jīng)確定,它可以引起界面模型中的一個(gè)元素產(chǎn)生。這種生成關(guān)系自動(dòng)引起生成和被生成元素之間的連接。連接和生成關(guān)系使得不僅從宏觀(guān)上方法的應(yīng)用框架展現(xiàn)出MVC模式的結(jié)構(gòu),而且,從微觀(guān)上來(lái)說(shuō),模型的具體元素之間也存在著MVC模式的結(jié)構(gòu),從而向界面工具箱的轉(zhuǎn)化更為簡(jiǎn)單和直接。
任務(wù)模型在建模階段,它的CTT元素一般和界面模型中的抽象界面模型連接。這種連接關(guān)系在任務(wù)模型轉(zhuǎn)化為語(yǔ)言類(lèi)庫(kù)中的類(lèi)時(shí),與抽象界面模型轉(zhuǎn)化為具體界面模型同步保持。最后在生成交互式系統(tǒng)時(shí),語(yǔ)言類(lèi)庫(kù)中的類(lèi)被自動(dòng)或者手動(dòng)的嵌人工具箱的控制器中,而相應(yīng)的具體界面模型的元素則自動(dòng)或者半自動(dòng)的轉(zhuǎn)化為最終的用戶(hù)界面的單元,成為MVC結(jié)構(gòu)中的視圖元素。
4 開(kāi)發(fā)方法的實(shí)例與評(píng)估
為了驗(yàn)證開(kāi)發(fā)方法的有效性,我們使用該方法基于jdk7.0開(kāi)發(fā)了一個(gè)圖書(shū)管理系統(tǒng)。作為演示,圖3給出了設(shè)計(jì)管理員或者普通用戶(hù)登錄后臺(tái)圖書(shū)管理系統(tǒng)時(shí),登錄界面的領(lǐng)域模型、任務(wù)模型和抽象界面模型。其中領(lǐng)域模型封裝了登錄類(lèi)型、用戶(hù)名和密碼。任務(wù)模型實(shí)質(zhì)上是一個(gè)并發(fā)任務(wù)樹(shù),圖中非葉節(jié)點(diǎn)的右邊注明了它所要轉(zhuǎn)化為編程語(yǔ)言類(lèi)庫(kù)的類(lèi)。界面模型的容器節(jié)點(diǎn)和交互類(lèi)型節(jié)點(diǎn)和任務(wù)模型的節(jié)點(diǎn)一一關(guān)聯(lián)起來(lái)。圖4和圖5分別是該模型圖的Java Swing和JSP的實(shí)現(xiàn)。可以看出由于在模型設(shè)計(jì)中隱含了系統(tǒng)的體系結(jié)構(gòu),引入了并發(fā)任務(wù)樹(shù),一方面能夠很好的保證系統(tǒng)的有用性和可用性,另一方面說(shuō)明性的模型可直接轉(zhuǎn)化為可執(zhí)行的功能模塊。
5 結(jié)束語(yǔ)
我們提出的MBUID方法,不僅具有易學(xué)易用、模型類(lèi)型較少、使用起來(lái)相當(dāng)靈活的特點(diǎn),而且能夠全面考慮一個(gè)交互式系統(tǒng)的各個(gè)側(cè)面,有效的解決了當(dāng)前MBUID方法中存在的一些問(wèn)題。通過(guò)我們的實(shí)踐證明,該方法能保證系統(tǒng)的有用性和可用性,模型設(shè)計(jì)和代碼實(shí)現(xiàn)能夠緊密結(jié)合。未來(lái)的工作中,我們將開(kāi)發(fā)支持工具,提高使用該方法開(kāi)發(fā)系統(tǒng)的自動(dòng)化程度。