中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
探索模型驅(qū)動(dòng)開發(fā) (MDD) 和相關(guān)方法,將領(lǐng)域特定建模應(yīng)用于模型驅(qū)動(dòng)的體系結(jié)構(gòu)(轉(zhuǎn)IBM)

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,您需要以下工具:

  • 建模和元模型建模概念和技術(shù)
    • 使用 EMF 的建模
    • 使用 GMF 模型來(lái)進(jìn)行工具開發(fā)
  • 模型轉(zhuǎn)換概念和技術(shù)的建模
  • 構(gòu)件轉(zhuǎn)換概念和技術(shù)的建模
  • 軟件工程和編程:
    • Java 編程
    • 了解 EMF API

 

領(lǐng)域特定語(yǔ)言和建模

日常生活中存在許多適用或使用 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。





回頁(yè)首


使用 DSL 來(lái)定義范圍

定義 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)域的用戶提取并重用。

閱讀 Wikipedia 對(duì) DSLDSM 的定義。有關(guān)這些術(shù)語(yǔ)的更多信息,請(qǐng)參見 參考資料。還可以在 Web 上找到更多有關(guān) DSL 和 DSM 的信息。

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è)反模式的示例如下:

  • 具有錯(cuò)誤上下文的 DSL,并混合了抽象級(jí)別(例如,混合了用例和用戶界面細(xì)節(jié))
  • 具有錯(cuò)誤上下文的 DSL,并且未能分離關(guān)注事項(xiàng)(例如,混合了持久性細(xì)節(jié)和用戶界面細(xì)節(jié))
  • 具有太多約束的 DSL,這是由僵化的結(jié)構(gòu)所導(dǎo)致的(例如,復(fù)雜應(yīng)用程序的配置細(xì)節(jié))
  • 具有太多元素(通常是由于未確定模式而導(dǎo)致的)或模型元素實(shí)例最終出現(xiàn)在元模型中的 DSL
  • 具有冗余內(nèi)容(例如,混合了用于不同類型的用戶界面的用戶交互流,包括 Web 瀏覽器,以及網(wǎng)頁(yè)交互流)

 





回頁(yè)首


定義領(lǐng)域

領(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)椋?

  • 元模型是自描述性的,并使用 DSL 來(lái)捕獲 DSL 的元模型(領(lǐng)域)。
  • 元模型相對(duì)容易理解;它們與實(shí)體關(guān)系模型非常相似。
  • 元模型易于使用和重用于進(jìn)一步的處理(模型驅(qū)動(dòng)的開發(fā))。
  • 元模型非常適應(yīng)模型驅(qū)動(dòng)的體系結(jié)構(gòu)方法。

 


圖 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)支持,并且概念通常得到了很好的理解。

定義 DSL

成功的領(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ù)。

  1. 使用紙和鉛筆,開始繪制您希望獲得的結(jié)果的模型實(shí)例。務(wù)必記住以下幾個(gè)簡(jiǎn)單概念:
    • 您是在繪制圖而不是樹(盡管樹也是圖)。
    • 使用方框來(lái)表示元素。
    • 在方框之間使用直接連接。
    • 使用方框中的方框來(lái)表示包含。
    • 此時(shí)不要過(guò)于擔(dān)心外觀,雖然大致了解以后將如何表示元素也是不錯(cuò)的。其他元素也是如此,例如連接。
    • 開始考慮各個(gè)方框的屬性。
    • 不要考慮元素的可視化放置;例如,左側(cè)的方框、位于 (10,10) 的方框 (x,y)。
  2. 考慮捕獲和繪制多個(gè)實(shí)例。
  3. 考慮捕獲同一個(gè)模型的不同表示形式(結(jié)構(gòu))。此方法可以幫助您更好了解領(lǐng)域,優(yōu)化元模型,并使您可以開發(fā)工具友好的元模型。
  4. 一旦擁有了一組很好的模型實(shí)例,并且這組模型實(shí)例似乎表示了您希望捕獲和傳達(dá)的概念,即可開始使用建模工具(此處為 EMF)來(lái)捕獲元模型并平面化元素層次結(jié)構(gòu)。建模環(huán)境和工具的約束將指導(dǎo)您開發(fā)有效的元模型。
  5. 不存在用于測(cè)試元模型的簡(jiǎn)單方法,因此最好的選項(xiàng)是反復(fù)試驗(yàn),直到該模型(基于已構(gòu)建的元模型)與預(yù)想的結(jié)果密切匹配。幸運(yùn)的是,創(chuàng)建工具是方便快捷的,因此試驗(yàn)過(guò)程也相對(duì)快速。

    不要直接從該元模型的第一個(gè)實(shí)例構(gòu)建關(guān)系圖編輯器;應(yīng)該首先使用更簡(jiǎn)單的模型編輯器,例如 EMF 樹編輯器。

  6. 在樹編輯器按預(yù)期工作以后,就可以開始構(gòu)建第一個(gè)關(guān)系圖編輯器了。這很可能也是一個(gè)迭代過(guò)程,同樣應(yīng)該使用反復(fù)試驗(yàn)的方法。

    該元模型可能不是“工具友好”的,意味著該元模型的約束不允許您按最初計(jì)劃的方式構(gòu)建可視化編輯器。在此情況下,唯一的選項(xiàng)是返回到最初的元模型,并嘗試使用不同的結(jié)構(gòu)和構(gòu)造來(lái)捕獲相同的概念。設(shè)計(jì)工具友好的元模型是一項(xiàng)從經(jīng)驗(yàn)中獲得的技能。

在嘗試捕獲良好的元模型時(shí)考慮以下事項(xiàng)。

定義范圍
確保模型中捕獲的信息級(jí)別一致并且相關(guān)。僅捕獲相關(guān)信息;不要構(gòu)建或使用復(fù)雜的通用模型。在模型中捕獲適當(dāng)級(jí)別的詳細(xì)信息,而不是混合不同的抽象級(jí)別。在捕獲元模型時(shí)應(yīng)用關(guān)注事項(xiàng)分離原則(將模型組件化)。確保模型中捕獲的信息不會(huì)在開發(fā)過(guò)程中在其他模型中重復(fù) DSM。在理想的情況下,所有的信息具有單個(gè)權(quán)威視圖或模型,其他模型只是反映內(nèi)容。

例如,基礎(chǔ)設(shè)施建模將從集中于位置和可能功能的概念性節(jié)點(diǎn)的捕獲開始,而不是考慮針對(duì)性能、可用性或類似特性的關(guān)注事項(xiàng)。下一步,您可以構(gòu)建一個(gè)更特定的模型,其中包括前面放棄的關(guān)注事項(xiàng)(性能、可用性等等)。在非常詳細(xì)的級(jí)別,該模型可以包括基礎(chǔ)設(shè)施的物理細(xì)節(jié),包括網(wǎng)絡(luò)地址、計(jì)算機(jī)類型、規(guī)格等等。

粒度
不存在用于計(jì)算或決定正確粒度級(jí)別的神奇公式??梢蕴岢鲆韵聠?wèn)題以幫助您做出決定:
  • 模型中應(yīng)該捕獲多少信息?
  • 需要多少信息才足以充分理解該領(lǐng)域并且易于傳達(dá)?
  • 信息在什么情況下太多?
考慮粒度的一種方法是在模型中捕獲細(xì)節(jié)和在轉(zhuǎn)換中捕獲細(xì)節(jié)之間尋找平衡:
  • 捕獲太多的細(xì)節(jié)就像是在使用某個(gè)模型或領(lǐng)域特定語(yǔ)言來(lái)開發(fā)代碼。在此情況下,留給轉(zhuǎn)換的細(xì)節(jié)所剩無(wú)幾。
  • 未在模型中捕獲足夠的信息會(huì)妨礙適當(dāng)級(jí)別的理解和傳達(dá)。在此情況下,大多數(shù)細(xì)節(jié)不得不包括在轉(zhuǎn)換中。
確定領(lǐng)域
使用 DSL,提出應(yīng)該確定多少個(gè)領(lǐng)域的問(wèn)題是恰當(dāng)?shù)?。答案取決于領(lǐng)域的上下文。與許多 IT 術(shù)語(yǔ)一樣,領(lǐng)域 是一個(gè)被反復(fù)使用的術(shù)語(yǔ)。通常,在考慮要指定的領(lǐng)域數(shù)量時(shí),您需要在兩件事情之間進(jìn)行區(qū)分。

首先,始終存在可正確地稱為領(lǐng)域的更大領(lǐng)域。這始終適用于其中某些元素僅遠(yuǎn)程相關(guān)的更大上下文。Java? 2 Platform, Enterprise Edition (J2EE) 應(yīng)用程序就是一個(gè)示例。這個(gè)大型領(lǐng)域包括 Enterprise JavaBeans (EJB)、Servlet 和 JavaServer Pages (JSP) 組件以及其他相關(guān)構(gòu)件。

其次,DSL 中的領(lǐng)域上下文要比前一情況更小和更集中。在無(wú)法用特定的領(lǐng)域術(shù)語(yǔ)來(lái)表述的情況下,應(yīng)該將這些領(lǐng)域稱為子領(lǐng)域或微領(lǐng)域。J2EE 應(yīng)用程序中的 EJB 模塊就是一個(gè)示例。這個(gè)特定領(lǐng)域僅考慮各種類型的 EJB 和與之相關(guān)的構(gòu)件。

處理語(yǔ)義
所有可能的元素安排(詞匯)在領(lǐng)域中都具有特定的解釋。不存在有關(guān)如何安排語(yǔ)言元素或如何解釋這些元素的歧義性。需要在所定義的領(lǐng)域范圍中表示的所有事物都可以使用該語(yǔ)言 (DSL) 來(lái)表示。

元模型中定義的約束是語(yǔ)義的關(guān)鍵驅(qū)動(dòng)因素。約束可以確保無(wú)效的安排不會(huì)出現(xiàn)在模型中。

工具友好性
對(duì)于元模型,工具友好性是指為特定元模型 (DSL) 設(shè)計(jì)和開發(fā)工具的容易程度?!肮ぞ哂押谩辈皇强茖W(xué)度量;它是一種從工具開發(fā)的角度表示模型質(zhì)量的方法。決定工具友好性是一項(xiàng)簡(jiǎn)單的測(cè)試:如果很容易為模型開發(fā)工具(在此例中為關(guān)系圖編輯器),則模型是工具友好的。采用工具友好性是用于實(shí)現(xiàn)以下目的的很好做法:
  • 更容易和更快的工具開發(fā)
  • 快速的原型開發(fā)
  • 加強(qiáng)的工具易用性
  • 更好的領(lǐng)域理解
  • 更好的模型構(gòu)造和更高的模型重用機(jī)會(huì)
遺憾的是,在捕獲元模型時(shí),減輕工具開發(fā)人員的工作不屬于優(yōu)先考慮的事項(xiàng)。自底向上的方法通常產(chǎn)生工具不友好的元模型。然而,遵循自頂向下的方法(或任何其他方法)來(lái)捕獲元模型并不能保證工具友好性。

領(lǐ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):

  • 架構(gòu)師或程序員對(duì)領(lǐng)域的更好理解
  • 工具友好的元模型
  • 非常高的重用可能性
  • 有關(guān)易用性和可用性的信息
  • 更接近元模型的設(shè)計(jì)
  • 所捕獲的模型中可潛在地在其他場(chǎng)合共享和重用的語(yǔ)義

 





回頁(yè)首


將 DSM 投入實(shí)踐

根據(jù)“一幅圖勝過(guò)千言萬(wàn)語(yǔ)”的精神,使用為特定領(lǐng)域定義的元素的可視化模型表示形式可以完整地描述整個(gè)解決方案。盡管可以使用許多技術(shù)和技巧來(lái)為 DSM 提供工具支持,但是本文僅討論一個(gè)選項(xiàng):使用 EMF 和 GMF 的 DSM。

其他 developerWorks 文章介紹了如何將 UML 用于軟件工程,甚至用于 DSL/DSM 目的。(請(qǐng)參閱 參考資料。)

在深入到使用 EMF 和 GMF 的細(xì)節(jié)之前,讓我們看一下 DSL/DSM 與統(tǒng)一建模語(yǔ)言(Unified Modeling Language,UML)路線之間的簡(jiǎn)要比較。務(wù)必理解的是,存在不同的路線不是為了彼此競(jìng)爭(zhēng)。

選擇 DSL/DSM 還是 UML?

在某些方面,使用 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ǔ)言所需要的技能。

開發(fā)該語(yǔ)言 (DSL) 或建模工具 (DSM)
使用 EMF 和 GMF 需要 EMF 的知識(shí),EMF 不過(guò)就是一個(gè)實(shí)體關(guān)系建模工具。GMF 本身就是一種 DSL,您必須理解它才能開發(fā)圖形關(guān)系圖編輯器。

使用 UML2 的開發(fā)需要充分了解 UML2 元素、元素之間的關(guān)系,以及如何定義構(gòu)造型來(lái)對(duì)元素進(jìn)行自定義。以圖形關(guān)系圖編輯器為例。如果該編輯器的功能不足夠,則存在某種程度的自定義空間,此自定義需要特定的開發(fā)技能。

使用該語(yǔ)言 (DSL) 或建模工具 (DSM) 本身進(jìn)行開發(fā)
對(duì)于 EMF 和 GMF,一旦了解了特定的領(lǐng)域,開發(fā)是非常簡(jiǎn)單的。

在 UML2 的情況下,開發(fā)人員必須熟悉特定的領(lǐng)域和 UML2 本身。

 

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ā)支持。





回頁(yè)首


探索 EMF 和 GMF 路線

EMF 是來(lái)自 Eclipse 工作臺(tái)的成熟技術(shù)。有關(guān)使用 EMF 的詳細(xì)信息超出了本文的范圍。有關(guān)高級(jí)功能的概述和信息,請(qǐng)參見 參考資料。

使用 GMF 進(jìn)行圖形建模

作為 Eclipse 中的一個(gè)相對(duì)較新的項(xiàng)目,GMF 提供了一個(gè)為 Eclipse 工作臺(tái)開發(fā)圖形工具和關(guān)系圖編輯器的框架。該框架包括兩個(gè)部分:

  • GMF 運(yùn)行時(shí)(Eclipse 的一部分,并提供用于圖形工具的基本的公共元素和服務(wù))
  • GMF 工具(幫助進(jìn)行使用 GMF 運(yùn)行時(shí)的 Eclipse 插件的開發(fā),以交付最終的建模工具)

 

GMF 本身的工具是一組專用于圖形建模工具開發(fā)的 DSL。從本質(zhì)上講,GMF 合并各種圖形建模工具中的功能、能力和模式(超集),從該工具超集中提取可變性,并最終為開發(fā)模式提供一個(gè)建模前端。

GMF 是用于為 DSL/DSM 開發(fā)工具的理想選擇,因?yàn)樗?

  • 方便快捷
  • 遵循模型驅(qū)動(dòng)的方法,無(wú)需編寫任何一行代碼即可產(chǎn)生結(jié)果
  • 提供了可滿足圖形建模工具環(huán)境的大多數(shù)復(fù)雜和苛刻要求的完善級(jí)別
  • 產(chǎn)生高質(zhì)量的工具

 

建模方法

圖 2 顯示了用于構(gòu)建建模工具、建模本身和在模型基礎(chǔ)上產(chǎn)生構(gòu)件的最基本方法。


圖 2. 基本建模方法

從本質(zhì)上講,如圖所示,存在兩個(gè)起點(diǎn):

  1. 首先創(chuàng)建元模型,而不考慮最終構(gòu)件的關(guān)注事項(xiàng)
  2. 使用最終構(gòu)件來(lái)驅(qū)動(dòng)元模型的開發(fā)或在最終構(gòu)件基礎(chǔ)上生成元模型

 

從元模型開始,開發(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)
優(yōu)點(diǎn) 缺點(diǎn)
  • 存在構(gòu)建工具友好的元模型的更好機(jī)會(huì)。
  • 可能不會(huì)產(chǎn)生預(yù)期的構(gòu)件或提供用于生成構(gòu)件的理想輸入。
  • 由于前述原因,正反向工程可能中斷。

自底向上的建模方法從構(gòu)件開始,基于實(shí)例構(gòu)建模型,最后在模型的基礎(chǔ)上定義元模型。表 2 顯示了自底向上的建模方法的優(yōu)點(diǎn)和缺點(diǎn)。


表 2. 使用自底向上建模方法的優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn) 缺點(diǎn)
  • 代碼(構(gòu)件)生成器要么很容易開發(fā),要么是其中一個(gè)副產(chǎn)品。
  • 開發(fā)元模型來(lái)表示構(gòu)件的概念和上下文是非常繁瑣的。
  • 創(chuàng)建工具友好的元模型非常繁瑣,需要技能和專業(yè)知識(shí)。

上述兩種方法的組合是“中間相遇”(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)
優(yōu)點(diǎn) 缺點(diǎn)
  • 從現(xiàn)有的模型和構(gòu)件開始;不需要開發(fā)新的模型和構(gòu)件。
  • 可能獲得預(yù)期用于圖形建模和用于生成構(gòu)件的結(jié)果。
  • 需要深入理解現(xiàn)有的元模型(自頂向下和自底向上),因?yàn)樗鼈兒芸赡軄?lái)自于不同的來(lái)源。
  • 很可能需要附加的開發(fā)或使用映射工具來(lái)進(jìn)行轉(zhuǎ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ò)不同的形式定義元模型的約束,包括使用:

  • 某種約束語(yǔ)言,例如 OCL
  • 特定擴(kuò)展點(diǎn)的某種編程語(yǔ)言,例如 Java
  • 正則表達(dá)式,例如 regexp
約束不僅限制模型中的某些構(gòu)造,其中某些約束還可以計(jì)算和填充元素的值。還可以在元模型中捕獲一些較簡(jiǎn)單的約束,而不需要用于支持復(fù)雜約束的擴(kuò)展。這些約束可以是必需屬性、基數(shù)或預(yù)定義(缺?。┲?。

 

有關(guān)約束和使用約束來(lái)進(jìn)行圖形建模的更多信息,請(qǐng)參見 參考資料。

轉(zhuǎn)換

轉(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)換可用于各種目的,例如:

  • 在模型基礎(chǔ)上生成代碼
  • 將一個(gè)或多個(gè)模型映射到另一個(gè)模型(一對(duì)一或多對(duì)一)
  • 在代碼構(gòu)件基礎(chǔ)上生成模型

 

在使用轉(zhuǎn)換時(shí),具有相同元模型的模型實(shí)例之間的幾個(gè)轉(zhuǎn)換示例包括:

  • 充實(shí)或擴(kuò)展源模型
  • 初始化源模型
  • 更改源模型中的數(shù)據(jù)(包括版本更新)
GMF 應(yīng)用程序的開發(fā)過(guò)程中有一組用作示例的很好轉(zhuǎn)換。GMF 儀表板(Eclipse 視圖)甚至提供了轉(zhuǎn)換步驟、構(gòu)件及其關(guān)系的可視化表示形式。

 

開發(fā)過(guò)程

為 DSL/DSM 開發(fā)工具是一個(gè)高度迭代的過(guò)程,如下所述。

  1. 開發(fā)元模型。可以通過(guò)各種格式捕獲元模型,例如 XML 模式 (XSD)、帶注釋的 Java 代碼、ECore 模型或 Rational Rose? UML 模型。
  2. 生成基本工具將產(chǎn)生一個(gè)簡(jiǎn)單的樹形編輯器。此編輯器已經(jīng)是一個(gè)可用的工具,沒有新奇的功能,僅用于滿足基本的編輯需要。
  3. 使用該基本工具來(lái)測(cè)試模型。重復(fù)從步驟 1 開始的步驟,直到達(dá)到預(yù)期的結(jié)果。
  4. 通過(guò)以下方式創(chuàng)建并指定工具模型:
    • 創(chuàng)建工具面板 (.gmftool)。
    • 創(chuàng)建圖形元素及其可視化表示形式 (.gmfgraph)。
    • 創(chuàng)建領(lǐng)域模型、圖形和可視化元素以及工具面板之間的映射 (.gmfmap)。
  5. 在前面步驟中指定的模型的基礎(chǔ)上生成工具。
  6. 測(cè)試該圖形建模工具。

    從步驟 4 開始重復(fù),直到達(dá)到預(yù)期的結(jié)果。

此時(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





回頁(yè)首


開發(fā)和運(yùn)行時(shí)環(huán)境

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ā)用于建模的插件的兩種使用形式如下:

  • 安裝在現(xiàn)有的 Eclipse 工作臺(tái)之上,使其成為開發(fā)環(huán)境不可或缺的一部分。
  • 安裝為獨(dú)立插件,仍然使用 Eclipse 工作臺(tái),但是獨(dú)立于 Rich Client Platform 之上的其余開發(fā)工具而運(yùn)行。

 





回頁(yè)首


總結(jié)

領(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ù)

討論


關(guān)于作者

Peter Kovari 是英國(guó) Hursley 的 IBM Software Group Services 組織的成員。他的職責(zé)范圍從專家領(lǐng)域到各種 IT 體系結(jié)構(gòu)。他經(jīng)常前往客戶所在的地點(diǎn),幫助客戶正確地采用 IBM 的各軟件產(chǎn)品系列。在此以前,Peter 曾是北卡羅萊納州 Raleigh 的 ITSO 的一名 IT 專家、項(xiàng)目負(fù)責(zé)人,并與其他來(lái)自世界各地的 IBM 專業(yè)人員一同編寫 IBM Redbooks?。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
聊聊低代碼平臺(tái)
基于 GMF 的流程分析工具的設(shè)計(jì)與實(shí)現(xiàn)
創(chuàng)新工場(chǎng)蔡學(xué)鏞:領(lǐng)域語(yǔ)言的設(shè)計(jì)與實(shí)踐
UML相關(guān)工具一覽(2005年7月版)
詳解軟件體系結(jié)構(gòu)的現(xiàn)狀及發(fā)展方向
15 分鐘學(xué)會(huì) Eclipse GMF
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服