2008 年 7 月 24 日 在本文中,使用 Eclipse Modeling Framework (EMF) 和 Graphical Modeling Framework (GMF) 技術(shù)來(lái)為領(lǐng)域特定語(yǔ)言產(chǎn)生領(lǐng)域特定建模輔助工具。了解定義領(lǐng)域特定語(yǔ)言的價(jià)值,探索基本概念和不同的建模方法,以及獲取有關(guān)創(chuàng)建良好元模型的提示。 在體系結(jié)構(gòu)設(shè)計(jì)和軟件工程中,您需要清楚理解體系結(jié)構(gòu)的領(lǐng)域,并且能夠有效地將該信息傳達(dá)給其他人員??梢允褂酶鞣N技術(shù)和工具來(lái)應(yīng)對(duì)此挑戰(zhàn),例如使用領(lǐng)域特定語(yǔ)言(domain-specific language,DSL)和領(lǐng)域特定建模(domain-specific modeling,DSM)。DSM 充當(dāng) DSL 的前端,并允許用戶通過(guò)可視化的表示形式來(lái)表示構(gòu)造。 本文集中于使用 Eclipse Modeling Framework (EMF) 和 Graphical Modeling Framework (GMF) 技術(shù)來(lái)說(shuō)明如何為 DSL 產(chǎn)生 DSM 輔助工具。 要使用 EMF 和 GMF 來(lái)開發(fā) DSL 和 DSM,您需要以下工具:
日常生活中存在許多適用或使用 DSL 的領(lǐng)域。一些實(shí)際 DSL 包括:交通和道路標(biāo)志、平裝家具組裝圖、象棋游戲(和大多數(shù)其他臺(tái)式游戲)以及電路設(shè)計(jì)。與 IT 相關(guān)的 DSL 示例包括 HTML、SQL、WS-* 標(biāo)準(zhǔn)、業(yè)務(wù)流程執(zhí)行語(yǔ)言(Business Process Execution Language,BPEL)和 POV 場(chǎng)景描述語(yǔ)言。 與這些 IT 示例相關(guān)的 DSM 示例包括所見即所得 (WYSIWYG) HTML 編輯器、BPEL 編輯器和 POV Modeler。
定義 DSL 是非常有價(jià)值的,因?yàn)?DSL 通過(guò)設(shè)置非常特定的范圍來(lái)幫助集中于特定的領(lǐng)域。一方面,小心設(shè)置的范圍可以確保領(lǐng)域?qū)<乙越Y(jié)構(gòu)化和詳細(xì)的方式捕獲知識(shí)和專門技術(shù)。另一方面,專門知識(shí)和技能可由該領(lǐng)域的用戶提取并重用。
DSL 的另一個(gè)重要方面在于,它使您可以指定粒度,這意味著在詳細(xì)描述和模糊描述之間尋求妥協(xié),定義 DSL 部分將對(duì)此進(jìn)行介紹。 為什么應(yīng)該使用 DSL 而不是使用通用語(yǔ)言(general purposed language,GPL)呢?與 DSL 相比,GPL 使用足夠簡(jiǎn)單和基本的詞匯來(lái)描述任何領(lǐng)域,而不描述明確細(xì)節(jié)。可以使用 GPL 來(lái)實(shí)現(xiàn)相同級(jí)別的領(lǐng)域表示和理解,但是與 DSL 方法相比,GPL 對(duì)關(guān)于該領(lǐng)域和通用語(yǔ)言的預(yù)期知識(shí)級(jí)別要求是相當(dāng)高的。DSL 的一個(gè)主要優(yōu)點(diǎn)在于,它需要很少的時(shí)間即可理解和傳達(dá)某個(gè)領(lǐng)域的詳細(xì)信息。它需要很少的時(shí)間來(lái)學(xué)習(xí)使用相關(guān)工具。 例如,業(yè)務(wù)應(yīng)用程序通常是使用復(fù)雜的軟件解決方案來(lái)實(shí)現(xiàn)的,但是大多數(shù)解決方案都使用相同的構(gòu)件(模式)來(lái)交付業(yè)務(wù)功能。DSL 使您可以對(duì)軟件解決方案進(jìn)行抽象,并隱藏實(shí)現(xiàn)細(xì)節(jié)。DSL 還可以使用來(lái)自業(yè)務(wù)領(lǐng)域的詞匯,并為 IT 領(lǐng)域提供轉(zhuǎn)換。 遺憾的是,存在使用得非常糟糕的 DSL 的實(shí)例(或反模式)。在這樣的情況下,DSL 被用在錯(cuò)誤的上下文中,并且通常是用于錯(cuò)誤的目的。幾個(gè)反模式的示例如下:
領(lǐng)域 是一個(gè)良好定義的主題方面,并使用一組有限的概念進(jìn)行描述。DSL 和 DSM 中的領(lǐng)域通常以元模型的形式捕獲,如 圖 1 所示。設(shè)置恰當(dāng)?shù)念I(lǐng)域范圍和正確地定義邊界是關(guān)鍵成功因素(將在稍后討論)。 可以使用不同的表示法、技術(shù)和工具以許多不同的方式定義 DLS 的領(lǐng)域。大多數(shù)情況下,為 DSL 指定的領(lǐng)域被描述為元模型。這是一種流行的方法,因?yàn)椋?
圖 1. 元-實(shí)例象限中的概念 使用實(shí)體關(guān)系模型是一種定義 DSL 的形式。還存在其他方法和形式,但是本文將集中于實(shí)體關(guān)系建模技術(shù),因?yàn)榇隧?xiàng)技術(shù)與稍后將描述的技術(shù)更密切相關(guān)。Eclipse 的 EMF 項(xiàng)目也正在遵循實(shí)體關(guān)系建模技術(shù)來(lái)捕獲 DSL。實(shí)體關(guān)系模型相對(duì)易于捕獲、易于維護(hù)、易于使用工具來(lái)支持,并且概念通常得到了很好的理解。 成功的領(lǐng)域規(guī)范的秘訣是擁有描述該領(lǐng)域的良好元模型。(稍后將討論良好元模型的要素。)捕獲元模型并不是無(wú)足輕重的任務(wù),而是需要大量的技能和經(jīng)驗(yàn)。技能可以通過(guò)實(shí)踐來(lái)獲得。捕獲元模型是某種類型的抽象,通常是架構(gòu)師應(yīng)該具備的技能。此活動(dòng)所需要的實(shí)際技能是能夠平面化層次(樹形)結(jié)構(gòu)。 存在各種捕獲元模型的不同方法和技術(shù)。以下示例也許可以幫助您著手開始此任務(wù)。
在嘗試捕獲良好的元模型時(shí)考慮以下事項(xiàng)。
在諸如 IT 等工程科學(xué)中,專家使用模型、關(guān)系圖和草圖來(lái)描述問(wèn)題或解決方案的特定細(xì)節(jié)。對(duì)可視化表示形式的需要起因于圍繞該行業(yè)的高度復(fù)雜性。抽象和自動(dòng)化論證了可視化建模需要的合理性。 IT 中的工程師處理各種輸入、輸出、工作產(chǎn)品和可交付件。一個(gè)輸出可能成為另一個(gè)工作產(chǎn)品的輸入。模型和關(guān)系圖通常就是實(shí)際工作產(chǎn)品或其中的一部分。信息流、先前成果的重用以及工作流自動(dòng)化論證了使用模型而不是使用簡(jiǎn)單關(guān)系圖的合理性。 構(gòu)建和使用工具方法應(yīng)該實(shí)現(xiàn):
根據(jù)“一幅圖勝過(guò)千言萬(wàn)語(yǔ)”的精神,使用為特定領(lǐng)域定義的元素的可視化模型表示形式可以完整地描述整個(gè)解決方案。盡管可以使用許多技術(shù)和技巧來(lái)為 DSM 提供工具支持,但是本文僅討論一個(gè)選項(xiàng):使用 EMF 和 GMF 的 DSM。
在深入到使用 EMF 和 GMF 的細(xì)節(jié)之前,讓我們看一下 DSL/DSM 與統(tǒng)一建模語(yǔ)言(Unified Modeling Language,UML)路線之間的簡(jiǎn)要比較。務(wù)必理解的是,存在不同的路線不是為了彼此競(jìng)爭(zhēng)。 在某些方面,使用 DSL 和 UML 的建模處于該范圍的兩個(gè)對(duì)立端。UML 是一種統(tǒng)一(或通用)建模語(yǔ)言;它可以支持幾乎任何模型。DSM 是一種領(lǐng)域特定 建模語(yǔ)言。它只能支持特定類型的模型。 使用 LEGO 玩具作為類比,將 UML 看作是一堆具有幾種不同顏色和幾種不同大小的基本標(biāo)準(zhǔn)積木塊。DSL 就像是中世紀(jì)騎士城堡工具箱中的一組大尺寸的砌塊、具有不同顏色和紋理的石塊——與中世紀(jì)城堡的整段石墻類似的大型元素。可以想象人們?nèi)绾瓮ㄟ^(guò)該工具箱建造非常吸引人的實(shí)用城堡。但是,在基本石塊基礎(chǔ)上建造起來(lái)的城堡缺乏適當(dāng)?shù)念伾⒓y理和中世紀(jì)特征。 存在兩個(gè)單獨(dú)的技能方面:定義 DSL 所需要的技能,以及使用該語(yǔ)言所需要的技能。
UML2 的用戶群比 EMF 和 GMF 更大,但是 EMF/GMF 陣營(yíng)正在不斷發(fā)展(通過(guò)郵件列表上的活動(dòng)和有關(guān)該主題的日益增加的文章數(shù)量可以判斷出這一點(diǎn))。相反,談到開發(fā) DSL/DSM,EMF 和 GMF 通常是首選的技術(shù)。選擇 EMF 和 GMF 的主要原因是 UML 關(guān)系圖中缺乏對(duì)某些更復(fù)雜的構(gòu)造的支持。 在將 IBM? Rational? Software Architect 中的 UML2 與 RSA 中的 EMF 和 GMF 做比較時(shí),團(tuán)隊(duì)開發(fā)是一個(gè)重要的方面。除了基于 Eclipse 工作臺(tái)的標(biāo)準(zhǔn)團(tuán)隊(duì)開發(fā)支持以外,Rational Software Architect 中的 UML2 工具還具有高級(jí)的建模功能以支持團(tuán)隊(duì)開發(fā)。這些功能包括模型比較、差異突出顯示和模型合并。EMF 目前不具備相同級(jí)別的團(tuán)隊(duì)開發(fā)支持。
EMF 是來(lái)自 Eclipse 工作臺(tái)的成熟技術(shù)。有關(guān)使用 EMF 的詳細(xì)信息超出了本文的范圍。有關(guān)高級(jí)功能的概述和信息,請(qǐng)參見 參考資料。 作為 Eclipse 中的一個(gè)相對(duì)較新的項(xiàng)目,GMF 提供了一個(gè)為 Eclipse 工作臺(tái)開發(fā)圖形工具和關(guān)系圖編輯器的框架。該框架包括兩個(gè)部分:
GMF 本身的工具是一組專用于圖形建模工具開發(fā)的 DSL。從本質(zhì)上講,GMF 合并各種圖形建模工具中的功能、能力和模式(超集),從該工具超集中提取可變性,并最終為開發(fā)模式提供一個(gè)建模前端。 GMF 是用于為 DSL/DSM 開發(fā)工具的理想選擇,因?yàn)樗?
圖 2 顯示了用于構(gòu)建建模工具、建模本身和在模型基礎(chǔ)上產(chǎn)生構(gòu)件的最基本方法。 圖 2. 基本建模方法 從本質(zhì)上講,如圖所示,存在兩個(gè)起點(diǎn):
從元模型開始,開發(fā)人員必須建立該特定領(lǐng)域的元模型或語(yǔ)言。約束可以充實(shí)元模型,以確保模型實(shí)例的語(yǔ)義正確性和有效性。大多數(shù)圖形編輯器都可以在元模型的基礎(chǔ)上生成,但是其他部分則必須手動(dòng)進(jìn)行定義??梢詾閳D形編輯器指定一組新的約束,因?yàn)閳D形表示形式可能使用與原始元模型不同的構(gòu)造來(lái)進(jìn)行建模??梢允褂脠D形編輯器來(lái)創(chuàng)建和編輯模型實(shí)例。這些模型是模型驅(qū)動(dòng)的開發(fā)的結(jié)果。模型成為轉(zhuǎn)換的輸入,以生成最終構(gòu)件(例如代碼)。 前面提到的兩個(gè)入口點(diǎn)與兩種基本的建模方法相關(guān):自頂向下和自底向上。 自頂向下的建模方法首先捕獲元模型,然后開發(fā)轉(zhuǎn)換和代碼生成器以產(chǎn)生構(gòu)件。表 1 顯示了自頂向下的建模方法的優(yōu)點(diǎn)和缺點(diǎn): 表 1. 自頂向下的建模方法的優(yōu)點(diǎn)和缺點(diǎn)
自底向上的建模方法從構(gòu)件開始,基于實(shí)例構(gòu)建模型,最后在模型的基礎(chǔ)上定義元模型。表 2 顯示了自底向上的建模方法的優(yōu)點(diǎn)和缺點(diǎn)。 表 2. 使用自底向上建模方法的優(yōu)點(diǎn)和缺點(diǎn)
上述兩種方法的組合是“中間相遇”(meet in the middle) 方法,此方法利用了前述兩種方法的優(yōu)點(diǎn)。開發(fā)從兩個(gè)方向開始,在概念元模型基礎(chǔ)上創(chuàng)建工具,同時(shí)基于構(gòu)件創(chuàng)建元模型。通過(guò)一組轉(zhuǎn)換建立所獲得的兩個(gè)元模型之間的聯(lián)系。表 3 顯示了這種組合方法的優(yōu)點(diǎn)和缺點(diǎn)。 表 3. 使用“中間相遇”方法的優(yōu)點(diǎn)和缺點(diǎn)
實(shí)際上,自頂向下的方法很少產(chǎn)生元模型以支持開發(fā)構(gòu)件的生成。這種方法對(duì)于捕獲概念及其關(guān)系是非常出色的。類似地,自底向上的方法很少產(chǎn)生可有效地傳達(dá)或描述特定領(lǐng)域的元模型。盡管可以遵循純粹的自頂向下或自底向上的方法,但這樣充滿了挑戰(zhàn)。 約束和驗(yàn)證經(jīng)常作為與元模型和 DSL 相關(guān)的主題一并進(jìn)行討論。約束 確保模型實(shí)例在語(yǔ)義上是正確的。驗(yàn)證 是檢查模型實(shí)例上的約束的過(guò)程。驗(yàn)證還可以為建模人員提供反饋,從而幫助糾正模型。 用 DSL 術(shù)語(yǔ)來(lái)說(shuō),約束確保使用該語(yǔ)言的詞匯來(lái)構(gòu)造的句子是有意義的。可以通過(guò)不同的形式定義元模型的約束,包括使用:
轉(zhuǎn)換用于將表示源實(shí)例的數(shù)據(jù)和結(jié)構(gòu)映射到表示目標(biāo)實(shí)例的新結(jié)構(gòu)和數(shù)據(jù)。轉(zhuǎn)換中的源和目標(biāo)可以是模型或任何其他構(gòu)件。用 DSL 術(shù)語(yǔ)來(lái)說(shuō),轉(zhuǎn)換是不同領(lǐng)域之間或某個(gè)領(lǐng)域和其他構(gòu)件之間的映射操作。之所以需要轉(zhuǎn)換,通常是因?yàn)閷?shí)例(模型或構(gòu)件)在不同的領(lǐng)域中、具有不同的格式或具有不同的版本。實(shí)際上,轉(zhuǎn)換可用于各種目的,例如:
在使用轉(zhuǎn)換時(shí),具有相同元模型的模型實(shí)例之間的幾個(gè)轉(zhuǎn)換示例包括:
為 DSL/DSM 開發(fā)工具是一個(gè)高度迭代的過(guò)程,如下所述。
此時(shí),基于某個(gè)元模型的圖形建模工具已經(jīng)可用了。如果該建模工具產(chǎn)生輸出,此輸出可能只是一個(gè)持久化的模型實(shí)例,則無(wú)需做其他工作。如果預(yù)期該模型將用作所生成的構(gòu)件的基礎(chǔ),則很可能必須開發(fā)一組轉(zhuǎn)換。 下面的圖來(lái)自于 GMF Eclipse 項(xiàng)目中附帶的 Mindmap 示例。這些圖顯示了一組用于開發(fā) GMF 工具的典型模型和項(xiàng)目構(gòu)件。圖 3 顯示了 Mindmap 工具。 圖 3. 用于 Mindmap 工具的 .ecore 模型 圖 4 顯示了工具面板定義。 圖 4. 工具面板定義 圖 5 顯示了圖形元素和形狀定義。 圖 5. 圖形元素和形狀定義 圖 6 顯示了 .ecore 模型、工具面板以及圖形節(jié)點(diǎn)和形狀之間的映射定義。 圖 6. .ecore 模型、工具面板以及圖形節(jié)點(diǎn)和形狀之間的映射定義 圖 7 顯示了項(xiàng)目細(xì)節(jié)和構(gòu)件。 圖 7. 項(xiàng)目細(xì)節(jié)和構(gòu)件 圖 8. 帶有所有模型的 GMF Dashboard
Eclipse 是使用 EMF 和 GMF 來(lái)進(jìn)行 DSL 和 DSM 開發(fā)的開發(fā)環(huán)境。IBM 的 Rational Software Architect 包括了為 DSL 和 DSM 開發(fā)工具所必需的所有 Eclipse 項(xiàng)目。相關(guān)項(xiàng)目包括 EMF、GEF、GMF、UML2 和 EMFT。Eclipse Modeling Project 具有這些項(xiàng)目的詳細(xì)信息。前面描述的工具開發(fā)的結(jié)果是 Eclipse 插件。本質(zhì)上,工具的運(yùn)行時(shí)環(huán)境是 Eclipse 工作臺(tái)。 主要開發(fā)用于建模的插件的兩種使用形式如下:
領(lǐng)域特定語(yǔ)言和領(lǐng)域特定建模是許多不同 IT 角色(甚至 IT 以外的角色)的工具箱中的強(qiáng)大工具。通過(guò)使用 DSL 和 DSM,IT 架構(gòu)師可以清楚理解他們所處理的領(lǐng)域,并且能夠更有效地傳達(dá)該領(lǐng)域的細(xì)節(jié)。然而,務(wù)必記住 DSL 和 DSM 不是解決所有問(wèn)題的萬(wàn)能答案——它們的適用性取決于所構(gòu)建的語(yǔ)言和工具的優(yōu)劣情況。 學(xué)習(xí)
獲得產(chǎn)品和技術(shù)
討論
|
聯(lián)系客服