王 凱
(電子科技大學(xué)移動計(jì)算中心 成都 610054)
伴隨計(jì)算機(jī)技術(shù)、通信技術(shù)的迅猛發(fā)展,移動計(jì)算技術(shù)已日漸融入大眾生活,并在提高生產(chǎn)力方面顯得日趨重要。其中,基于移動計(jì)算技術(shù)的交互式電子技術(shù)手冊(IETM)[1]因其人性化的交互式使用方式、迅捷的信息查閱以及專家知識輔助決策功能,在針對大型設(shè)備的故障診斷、維護(hù)和信息管理等方面起著積極的作用。然而,面對移動計(jì)算應(yīng)用環(huán)境下智能客戶端可以部署在PC、便攜式電腦、可穿戴計(jì)算機(jī)甚至手機(jī)等智能設(shè)備上的平臺多樣性問題,迫切需要將IETM的數(shù)據(jù)存儲與顯示分離,以解決由于數(shù)據(jù)存儲和顯示之間存在的天然耦合性而導(dǎo)致的IETM在不同的、性能迥異的設(shè)備之間無法正常顯示的問題。因此,本文提出一種分層設(shè)計(jì)架構(gòu)[2],利用XML[3]技術(shù)和JAVA[4]技術(shù),根據(jù)不同的移動計(jì)算平臺和相關(guān)設(shè)備的性能,動態(tài)構(gòu)建適合移動計(jì)算平臺和設(shè)備的IETM圖形用戶界面(GUI)。
本文提出的分層設(shè)計(jì)架構(gòu)所依賴的IETM數(shù)據(jù)存儲模型遵從美軍頒布的M IL-PRF-87269A[1](以下簡稱87269A)規(guī)范,該規(guī)范制定了一致的數(shù)據(jù)模型規(guī)范,使得IETM的數(shù)據(jù)內(nèi)容以統(tǒng)一的格式不受軟件與硬件的限制,即可跨平臺進(jìn)行數(shù)據(jù)遷徙。87269A規(guī)范中,內(nèi)容數(shù)據(jù)模型(content data model,CDM)將IETM中的技術(shù)信息劃分為兩個層次:上層為通用信息層(generic layer),下層為內(nèi)容特定層(content specific layer)。通用信息層含有建立整個IETM數(shù)據(jù)組織模型所需的諸如文字、表格、圖形、視頻等基本元素的標(biāo)準(zhǔn)模型,由這些標(biāo)準(zhǔn)模型規(guī)范的基本元素構(gòu)成了內(nèi)容特定層中具有不同功能的復(fù)雜元素;內(nèi)容特定層則是依據(jù)通用信息層中基本元素的標(biāo)準(zhǔn)模型而定義,以完成更復(fù)雜的功能,包括描述信息、任務(wù)信息、故障信息和零部件信息。
通過使用XML Schema[5]技術(shù)作為構(gòu)建符合CDM規(guī)范的IETM技術(shù)信息元素模型,可以利用由該技術(shù)生成的XML文檔的結(jié)構(gòu)和內(nèi)容分離、結(jié)構(gòu)化等優(yōu)點(diǎn),將CDM規(guī)范中描述的兩層信息結(jié)構(gòu)及關(guān)聯(lián)性統(tǒng)一于單個的XML文檔,從而形成可自我描述的、結(jié)構(gòu)化的XML樹狀數(shù)據(jù)存儲模型,該存儲模型與具體信息一同構(gòu)成IETM數(shù)據(jù)庫。基于XML Schema技術(shù)而生成的XML樹狀數(shù)據(jù)存儲模型的邏輯視圖如圖1所示。
圖1 基于XML技術(shù)的數(shù)據(jù)存儲模型的邏輯視圖
樹狀邏輯視圖中的每一個節(jié)點(diǎn)代表以XML Scheme技術(shù)定義的數(shù)據(jù)存儲模型中的元素,其中techinfo節(jié)點(diǎn)是整個IETM樹狀數(shù)據(jù)存儲模型的頂層元素,它代表CDM中定義的techinfo元素,CDM中定義的所有其他元素皆位于該節(jié)點(diǎn)之下。techinfo節(jié)點(diǎn)由一個代表版本信息的version子節(jié)點(diǎn)和至少一個system子節(jié)點(diǎn)構(gòu)成。節(jié)點(diǎn)system所代表的元素代表IETM中的一個系統(tǒng),該系統(tǒng)之下有可能包含其他system系統(tǒng)。
CDM中內(nèi)容特定層所定義的4類信息由descinfo節(jié)點(diǎn)、task節(jié)點(diǎn)、partinfo節(jié)點(diǎn)以及faultinf節(jié)點(diǎn)描述,它們均是system節(jié)點(diǎn)的子節(jié)點(diǎn),這4個節(jié)點(diǎn)共同構(gòu)成了CDM的內(nèi)容特定層。其中最重要的是代表描述信息的descinfo節(jié)點(diǎn),所有system節(jié)點(diǎn)至少應(yīng)該包含一個descinfo節(jié)點(diǎn)描述該系統(tǒng)。
通過para-seq節(jié)點(diǎn)的擴(kuò)充,descinfo節(jié)點(diǎn)可以或者包含其他的descinfo節(jié)點(diǎn),或者包含para節(jié)點(diǎn)。para節(jié)點(diǎn)代表了CDM中通用信息層所定義的、將被包含在描述信息中的全部基本元素,它們可以是文字、圖片、音頻、視頻等信息,共同構(gòu)成IETM的內(nèi)容。
針對移動計(jì)算應(yīng)用環(huán)境的IETM數(shù)據(jù)存儲和顯示分離的需求,運(yùn)用穩(wěn)定依賴原則[6],提出一種分層設(shè)計(jì)架構(gòu),將整個IETM分為如圖2所示的數(shù)據(jù)處理層和顯示層兩層。
圖2 分層架構(gòu)圖
數(shù)據(jù)處理層的首要功能是讀取、分析、處理符合數(shù)據(jù)存儲模型的、以任意形式表現(xiàn)的IETM數(shù)據(jù)庫,提取數(shù)據(jù)庫中的關(guān)鍵信息封裝成具有自我表述能力、包含關(guān)鍵顯示內(nèi)容信息和類型的DataFrame對象,以供顯示層解析。
顯示層則負(fù)責(zé)管理不同的可顯示頁面及其相互之間的導(dǎo)航瀏覽,并負(fù)責(zé)查找顯示新的可顯示頁面所需要的DataFrame對象,利用該對象自身包含的信息獲知頁面類型及相關(guān)數(shù)據(jù),并形成最終的可顯示頁面。
顯示層與數(shù)據(jù)處理層之間大多數(shù)時間使用拉模式(pull model)進(jìn)行交互,顯示層在需要DataFrame對象構(gòu)造可顯示頁面時,通過向數(shù)據(jù)處理層發(fā)送獲得數(shù)據(jù)的請求得到顯示所需的DataFrame對象,當(dāng)沒有所需的DataFrame對象時,數(shù)據(jù)處理層則作出恰當(dāng)?shù)耐ㄖ?。?dāng)用戶需要修改補(bǔ)充IETM內(nèi)容時,顯示層則使用推模式(push model)將更新過的DataFrame返回給數(shù)據(jù)處理層。
通過暴露有限的接口,顯示層和數(shù)據(jù)處理層實(shí)現(xiàn)了較好的隔離,任一層的變化不會涉及另一層,降低了系統(tǒng)各部分之間的耦合性,使得模塊互換成為可能[7]。
數(shù)據(jù)處理層的需求主要是讀取、解析不同的IETM數(shù)據(jù)庫,提取數(shù)據(jù)庫中的關(guān)鍵節(jié)點(diǎn)信息,封裝成DataFrame對象,并通過暴露有限幾個接口達(dá)到與顯示層交互的目的。在基于XML技術(shù)的IETM樹狀存儲模型中,較為重要的是代表設(shè)備描述信息的descinfo節(jié)點(diǎn)和代表基本元素的para節(jié)點(diǎn):前者可能包含其他descinfo節(jié)點(diǎn),也可能包含para節(jié)點(diǎn);后者則只是與基本元素相關(guān)的信息,可以直接用于構(gòu)建可顯示頁面。針對本層的需求和樹狀存儲模型的特點(diǎn),數(shù)據(jù)處理層詳細(xì)的類設(shè)計(jì)圖[8]如圖3所示。
圖3 數(shù)據(jù)處理層的類設(shè)計(jì)圖
該層數(shù)據(jù)相關(guān)部分使用Composite設(shè)計(jì)模式[9]滿足descinfo節(jié)點(diǎn)和para節(jié)點(diǎn)之間存在的樹狀關(guān)系,其中DescinfoFrame類代表模型中descinfo節(jié)點(diǎn),ParaFrame類代表模型中的para節(jié)點(diǎn),它們的父類DataFrame則是它們共同的抽象。所有繼承DataFrame類的子類都必須實(shí)現(xiàn)loadSelfData()方法,以完成彼此不同的數(shù)據(jù)加載和處理方式,并標(biāo)識出自己所代表的信息類型。
DataProcessor類是整個數(shù)據(jù)處理層的核心類,通過實(shí)現(xiàn)Singleton設(shè)計(jì)模式保證在程序運(yùn)行時只有一個該類的實(shí)例。該類使用代表DataFrame數(shù)據(jù)池的DataFramePool類保存全部已加載處理完畢的DataFrame對象,使用DataBaseConnector類處理與不同形式的數(shù)據(jù)庫交互。它的內(nèi)部方法loadData()保證數(shù)據(jù)庫中全部的descinfo節(jié)點(diǎn)信息和para節(jié)點(diǎn)信息均被實(shí)例化為DataFrame對象,且被添加到DataFrame數(shù)據(jù)池中。
憑借調(diào)用getDataFrame()方法,顯示層可以用代表DataFrame唯一標(biāo)識的id查找顯示所必需的DataFrame對象;當(dāng)用戶對IETM內(nèi)容進(jìn)行修改與補(bǔ)充后,代表新數(shù)據(jù)信息的DataFrame實(shí)例將由setDataFrame()方法同時更新IETM數(shù)據(jù)庫和DataFrame數(shù)據(jù)池。這些方法是數(shù)據(jù)處理層暴露給顯示層使用的幾個接口之一。
顯示層的需求除了在需要DataFrame構(gòu)造可顯示頁面時向數(shù)據(jù)處理層發(fā)送查詢請求,依據(jù)不同DataFrame構(gòu)造不同可顯示頁面,遵照用戶要求在不同的可顯示頁面之間導(dǎo)航外,在必要的情況下,還要滿足用戶對某些信息的修改與補(bǔ)充,并告知數(shù)據(jù)處理層信息已改變,需要更新。為滿足需求,顯示層使用MVC(model-view-controller)[2]體系結(jié)構(gòu)模式進(jìn)行設(shè)計(jì),相關(guān)的設(shè)計(jì)示意圖如圖4所示。
數(shù)據(jù)管理模塊提供與數(shù)據(jù)處理層交互的能力,并負(fù)責(zé)及時向顯示模塊和控制模塊通知顯示狀態(tài)與數(shù)據(jù)的改變、響應(yīng)對狀態(tài)與數(shù)據(jù)的查詢;顯示模塊向數(shù)據(jù)處理模塊查詢、顯示相關(guān)數(shù)據(jù),并允許控制模塊改變顯示內(nèi)容;控制模塊定義IETM的行為,提供用戶瀏覽、修改IETM的能力,并配合顯示模塊共同完成與用戶的交互功能。圖5為顯示層主要的類設(shè)計(jì)圖。
圖4 顯示層設(shè)計(jì)示意圖
圖5 顯示層的類設(shè)計(jì)圖
PageModel類封裝了與數(shù)據(jù)處理層交互的功能,獨(dú)立于特定的輸出表示法或輸入方法。PageViewer類向用戶顯示IETM的內(nèi)容信息,該類從PageModel類的實(shí)例獲取數(shù)據(jù)。每一個PageViewer實(shí)例都有一個相關(guān)聯(lián)的PageControl實(shí)例,PageControl實(shí)例接受用戶的輸入,將各種事件翻譯為對PageModel或PageViewer的請求,用戶通過該類與系統(tǒng)交互。
顯示層的各個組件之間通過變更-傳播機(jī)制[10]維護(hù)同步,顯示層響應(yīng)用戶事件的序列圖如圖6所示。該圖描述一個響應(yīng)用戶更改IETM信息事件的具體場景。
PageControl實(shí)例接受用戶輸入事件,解釋事件并啟動PageModel實(shí)例的服務(wù)過程。PageModel實(shí)例執(zhí)行請求的服務(wù),更改DataFrame相關(guān)信息,然后通過調(diào)用其更新過程通知所有已向變更-傳播機(jī)制注冊的PageViewer實(shí)例和PageControl實(shí)例所發(fā)生的改變,PageViewer實(shí)例向PageModel實(shí)例請求改變的數(shù)據(jù)并將其正確顯示。通知過程完畢后,調(diào)用setData()方法將改變的DataFrame通過DataProcessor實(shí)例保存到IETM數(shù)據(jù)庫中,并更新DataFrame數(shù)據(jù)池中的過期數(shù)據(jù)。
圖6 顯示層響應(yīng)用戶事件的序列圖
數(shù)據(jù)處理層與顯示層之間的交互主要由DataProcessor實(shí)例和PageModel實(shí)例的交互完成。
數(shù)據(jù)處理層將封裝處理完畢的、以DataFrame實(shí)例表示的信息存儲于DataFrame數(shù)據(jù)池中供顯示層查詢獲取;顯示層通過調(diào)用數(shù)據(jù)處理層的getDataFrame()接口達(dá)到查詢與獲取數(shù)據(jù)的目的。
當(dāng)顯示層響應(yīng)用戶諸如修改、補(bǔ)充新的IETM數(shù)據(jù)等事件時,該層通過向數(shù)據(jù)處理層的setDataFrame()接口發(fā)送消息,將已更新完畢的DataFrame數(shù)據(jù)發(fā)送到數(shù)據(jù)處理層的數(shù)據(jù)處理模塊,該模塊同步修改IETM數(shù)據(jù)庫中的相關(guān)信息,同時替換DataFrame數(shù)據(jù)池中已過期的DataFrame實(shí)例,以達(dá)到IETM數(shù)據(jù)庫和DataFrame數(shù)據(jù)池中信息的同步更新。
本文針對移動計(jì)算應(yīng)用環(huán)境下智能客戶端所面臨的特殊情況,提出一種分層設(shè)計(jì)架構(gòu),并對IETM數(shù)據(jù)模型表示,以及相關(guān)數(shù)據(jù)信息的存儲、顯示與控制等問題給出了相應(yīng)的解決方法。運(yùn)用該設(shè)計(jì)架構(gòu)實(shí)現(xiàn)的IETM可以合理滿足各方面需求,達(dá)到信息維護(hù)和輔助作業(yè)目的。
[1] Tri-Service Working Group for Interactive Elective Technical Manuals. M IL-PRF-87269A, performance specification, database, revisable-interactive electronic technical manuals, for the support of[S]. USA: Tri-Service Working Group for Interactive Elective Technical Manuals,1995.
[2] BUSCHMANN F, MEUNIER R, ROHNET H, et al.Pattern-oriented software architecture volume 1: a system of pattern[M]. USA: John Wiley, 2005.
[3] World Wide Web Consortium (W 3C). Extensible markup language 1.0(XML)[EB/OL]. [2008-11-26]. http://www.w3.org/TR/XML/.
[4] GOSLING J, JOY B, STEELE G, et al. The Java(TM)language specification[M]. 3rd ed. USA:Sun M icrosystems,2005.
[5] World Wide Web Consortium(W 3C). XML schema part1:structures second edition[EB/OL]. [2004-10-28]. http://www.w3.org/TR/xm lschema-1/.
[6] MARTIN R C. Agile software development: principles,patterns and practices[M]. Englewood Cliffs, NJ: Prentice Hall, 2003.
[7] SHALLOWAY, TROTT J R. Design patterns explained: a new perspective on object-oriented design[M]. Boston, MA:Addison Wesley Professional, 2004.
[8] Object Management Group. Unified modeling language(UML), Version 2.2[EB/OL]. [2009-02-04]. http://www.omg.org/technology/documents/formal/um l.htm.
[9] GAMMA E. HELM R, JOHNSON R, et al. Design patterns:elements of reusable object-oriented software[M]. Boston,MA: Addison Wesley Professional, 2005.
[10] COOPER J W. Java design patterns: a tutorial[M]. Boston,MA: Addison-Wesley Professional, 2000.
編 輯 蔣 曉