国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

RSA中UML建模元素的擴展與定制(1)

2019-11-17 04:49:26
字體:
供稿:網(wǎng)友
1 摘要 RSA為基于UML進行業(yè)務(wù)建模并完成底層代碼生成的開發(fā)人員提供了可視化的建模環(huán)境,開發(fā)人員可以因此方便的從Palette中拖取合適的UML元素來表達業(yè)務(wù)語義。但是在很多時候,開發(fā)人員希望在Palette中定制自己的工具項,從而便捷的使用具有更豐富業(yè)務(wù)概念和關(guān)系語義的UML元素。本文基于RSA 6.0中UML建模元素的容器--標準palette插件,從靜態(tài)配置和動態(tài)加載兩種途徑提供了擴展Palette的基本方法和其中需要關(guān)注的技術(shù)難點。文章也舉例說明了如何在具體實現(xiàn)中嵌入對Palette擴展工具項所生成的UML元素的定制。2 引言IBM® Rational Software Architect -- IBM軟件開發(fā)平臺的一部分,是IBM在2003年2月并購Rational以來首次發(fā)布的Rational產(chǎn)品。RSA作為一個集成化的設(shè)計和開發(fā)工具,支持使用UML進行模型驅(qū)動的開發(fā)以得到架構(gòu)良好的應(yīng)用和服務(wù)。RSA是在Eclipse 3.0 的基礎(chǔ)之上創(chuàng)建的,因而支持Eclipse 提供的使用特性,其中最為主要的就是Eclipse插件技術(shù)。本文所要討論的Palette就是使用Eclipse插件技術(shù)嵌入到RSA工具環(huán)境中的一個UI組件。假設(shè)有如下的場景:開發(fā)人員使用RSA為一個網(wǎng)上電子零售業(yè)務(wù)進行業(yè)務(wù)建模,在建模過程中需要大量重用如下4個業(yè)務(wù)角色:
  • 提供商
  • 消費者
  • 商品
  • 零售商
使用RSA建模環(huán)境下原有的Palette,需要反復(fù)拖入Class元素并為每個這樣創(chuàng)建的Class賦予相應(yīng)的構(gòu)造型(Stereotype)以表達如上之一的業(yè)務(wù)角色。如下是使用RSA中未擴展的UML建模環(huán)境進行建模時的界面:圖1 使用RSA經(jīng)典UML建模環(huán)境進行網(wǎng)上電子零售業(yè)務(wù)建模

RSA中UML建模元素的擴展與定制(1)(圖一) 為了提高建模的效率,開發(fā)人員希望在Palette中定制代表了這些業(yè)務(wù)角色的新元素。本文基于上面的實例總結(jié)了開發(fā)人員在進行Palette擴展時所采用的基本實現(xiàn)技術(shù)和難點。3 基于RSA的Palette靜態(tài)擴展從前面的討論可以知道,RSA是構(gòu)建在Eclipse3.0的基礎(chǔ)之上的。Eclipse的插件結(jié)構(gòu)是Eclipse重要的基礎(chǔ)設(shè)施和體系結(jié)構(gòu),其中應(yīng)用擴展點是兩個或者多個插件完成協(xié)作的基礎(chǔ)?;赗SA的Palette靜態(tài)擴展方法就是通過Eclipse,定義單獨的插件來完成Palette擴展點的定義,從而增加新的建模功能。本節(jié)將通過一個簡單的"零售業(yè)務(wù)建模"的例子向您逐步展示如何來對RSA的Palette進行擴展。在"零售業(yè)務(wù)建模"中,我們需要四類角色:零售提供商、商品、消費者和零售商。為了提供更好的操作感覺和交互過程,我們將擴展Palette面板,這樣進行零售業(yè)務(wù)建模就如同UML建模一樣的直觀快捷。同RSA平臺中其他插件一樣,Palette也是通過擴展點來進行定義的,所以,必須要在插件清單plugin.xml文件中聲明所需要的擴展點,并且提供相應(yīng)的實現(xiàn)類。對于Palette而言,要聲明的擴展點就是com.ibm.xtools.PResentation.paletteProvider,要提供的實現(xiàn)類必須實現(xiàn)com.ibm.xtools.presentation.internal.services.palette.IPaletteProvider接口。當然,也可以使用缺省的com.ibm.xtools.presentation.internal.services.palette.DefaultPaletteProvider類,因為DefaultPaletteProvider已經(jīng)完全實現(xiàn)了IPaletteProvider接口,在RSA的一些建模插件中,可以查找到使用的都是這個缺省的Palette提供類。就palette而言,只有這樣的聲明是不夠的,更加完整的擴展聲明如清單1所示。清單1 一個完整的Palette擴展聲明

RSA中UML建模元素的擴展與定制(1)(圖二)
點擊查看大圖
其中,比較重要的部分就是contribution節(jié)點,該節(jié)點聲明了要為Palette添加內(nèi)容,他的屬性factoryClass必須要指定一個實現(xiàn)類,提供生成相應(yīng)工具的工廠方法。在Contribution節(jié)點中,通過聲明entry節(jié)點來實現(xiàn)在Palette面板上要添加的抽屜(drawer,Palette面板上容納工具的容器)或者工具盒(tool)。例如,首先要添加一個容納零售業(yè)務(wù)建模工具的抽屜,那么清單2中的片斷就完成了這樣的聲明:清單2 一個典型的Palette抽屜擴展聲明

RSA中UML建模元素的擴展與定制(1)(圖三)以清單2為例,上述entry節(jié)點中
  • label聲明了要在Palette面板中顯示的名字;
  • kind聲明了該Entry是drawer類型(或者是tool類型);
  • id聲明了他的唯一性并在程序中將使用該id來唯一標識;
  • path聲明了他在Palette或者drawer中的位置,他的格式同Menu和Toolbar中擴展的path格式是一致的。

類似的,在添加了抽屜之后,就要在抽屜中添加建模的工具,對應(yīng)的就是零售提供商工具、商品工具和消費者工具,如清單1中所示。這個時候我們新建立一個插件工程,并把上述Palette擴展聲明填寫進插件清單文件中去,然后以工作臺方式運行,我們新建的這個插件也會被自動裝載進啟動的工作臺中。新建"UML模型",打開"建模"視圖,我們可以在palette面板上看到如圖2的所示的截圖。圖2 用于零售業(yè)務(wù)建模的Palette片斷

RSA中UML建模元素的擴展與定制(1)(圖四)雖然,我們新擴展的零售建模工具已經(jīng)在Palette面板中出現(xiàn),但是他們不能執(zhí)行任何操作,甚至?xí)伋霎惓#虼?,我們要進一步添加功能方面的擴展。首先,對應(yīng)著Palette中的工具,在插件中要有相應(yīng)的工具類來完成該工具的操作。這個工具類通常要求繼續(xù)自com.ibm.xtools.presentation.internal.tools.CreationTool,例如實現(xiàn)消費者的模型生成工具類的代碼段如下:

RSA中UML建模元素的擴展與定制(1)(圖五)其中,
  • 構(gòu)造函數(shù),傳進參數(shù)IElementType,定義該模型具有的語義信息;
  • performCreation,具體的執(zhí)行動作,為了簡單起見,我們都是調(diào)用了父類的方法。
類似的,我們也實現(xiàn)了零售提供商和商品的生成工具類,即SupplierCreationTool和ProdUCtCreationTool。這些工具生成類的對象控制都是由插件清單中指定的工廠類來進行控制的,如清單1中的片斷,

RSA中UML建模元素的擴展與定制(1)(圖六)
點擊查看大圖
這個工廠需要繼續(xù)自com.ibm.xtools.gef.internal.ui.palette.PaletteFactory.Adapter,事實上PaletteFactory的Adapter已經(jīng)完成了絕大部分的工作,在例子中實現(xiàn)的工廠類BizdemoPaletteFactory中僅僅需要重載一個方法就可以了,如下面程序段所示:RSA中UML建模元素的擴展與定制(1)(圖七)其中:
  • 參數(shù)toolId,表示的是目前需要生成的工具id,對應(yīng)的也就是插件清單文件中Entry節(jié)點聲明的id;
  • 返回值,返回對應(yīng)的生成工具對象,也就是我們前面已經(jīng)實現(xiàn)的四個生成工具類;
  • 傳遞給生成工具對象的ElementType,為了簡單起見,我們將UML中的CLASS類型傳給了生成工具,在第五章中,我們將介紹如何對他進行進一步的擴展,包括在語義方面的擴展。
至此,我們就已經(jīng)用靜態(tài)擴展的方式對Palette進行了擴展,提供了一個簡單的零售業(yè)務(wù)的建模工具。更多的請看:http://www.QQread.com/windows/2003/index.Html4 基于RSA的Palette動態(tài)擴展 上節(jié)給出了通過編輯RSA插件工程的plugin.xml文件中提供的擴展點進行靜態(tài)Palette擴展的基本方法。在一些特定情況下,開發(fā)人員在進行業(yè)務(wù)建模和業(yè)務(wù)開發(fā)時無法完全窮舉業(yè)務(wù)模型中所需要的所有角色,并在plugin.xml的擴展點中完成定義。就網(wǎng)上電子零售業(yè)務(wù)而言,未來該業(yè)務(wù)的供貨來源很有可能被擴展到海外,并且需要為該角色添加"國籍"、"報關(guān)單"、"報關(guān)"等新的屬性和行為。為此需要從提供商中分離出"國外提供商"這樣新的業(yè)務(wù)角色。"國外提供商"和原有的"國內(nèi)提供商"屬于相同的Palette分組,但是重新編碼、編譯、構(gòu)建原有的插件工程會給代碼維護帶來一定的困難,因為開發(fā)人員無法預(yù)料在將來是否還有添加更多的角色。綜上,開發(fā)人員希望在提供靜態(tài)Palette擴展的插件(下文稱之為BizDemo核心插件)內(nèi)提供必要的擴展點,答應(yīng)未來新的業(yè)務(wù)角色以新的插件的形式嵌入到RSA環(huán)境中來。這樣的插件下文稱之為BizDemo擴展插件)將使用Palette核心擴展插件暴露的擴展點,以答應(yīng)核心插件在動態(tài)加載時讀取其工具項配置,將擴充的工具項添加到Palette中來。進行Palette動態(tài)擴展的第一步是為第3節(jié)中創(chuàng)建的BizDemo核心插件開放一個擴展點,體現(xiàn)在插件工程中,就是在plugin.xml中添加如下清單所示的聲明:

清單3 為支持Palette動態(tài)擴展在插件工程中添加的擴展點

RSA中UML建模元素的擴展與定制(1)(圖八)該聲明規(guī)定擴展點的id為bizdemoProviders,該id將作為未來提供擴展業(yè)務(wù)角色語義的新插件的定位擴展點的依據(jù)。同時,上面的聲明還指出,未來這樣的新插件必須在自己的plugin.xml聲明中使用核心插件schema目錄下bizdemoProviders.exsd文件所規(guī)定的XML語法來表達對該擴展點的擴展聲明。因而,BizDemo核心插件必須在自己的工程目錄下創(chuàng)建一個schema目錄和其下的一個名為bizdemoProviders.exsd的XSD文件。如下給出了該文件的要害片斷:清單4 描述BizDemo核心插件bizdemoProvider擴展點的XSD片斷

RSA中UML建模元素的擴展與定制(1)(圖九)
下面的步驟就是創(chuàng)建一個用來描述"國外提供商"業(yè)務(wù)語義的基于BizDemo核心插件的擴展插件。首先,使用RSA創(chuàng)建一個普通的插件工程,并在plugin.xml中添加如下的聲明:清單5 為使用在BizDemo核心插件中定義的擴展點而在擴展插件plugin.xml中給出的聲明

RSA中UML建模元素的擴展與定制(1)(圖十)該聲明片斷完全符合清單4定義的語法,它表示新的插件將使用BizDemo核心插件的擴展點bizdemo.palette.bizdemoProviders(bizdemo.palette是BizDemo核心插件的id,也作為擴展點的名字空間),并在bizdemoProvider元素的屬性descriptor中指出了提供新的業(yè)務(wù)角色語義的文件名。接下來在新插件工程的根目錄下生成名為bizdemo-role.xml的XML文件,并在文件中如下描述"國外提供商"Palette擴展工具項的基本屬性:清單6 描述了"國外提供商"Palette擴展工具項屬性bizdemo-role.xml聲明片斷

RSA中UML建模元素的擴展與定制(1)(圖十)
點擊查看大圖
該聲明規(guī)定了將要添加到BizDemo抽屜中的"國外提供商"工具項的id、label、large_icon、small_icon、description等屬性。這些屬性和第3節(jié)清單1中所列舉的靜態(tài)定義屬性一一對應(yīng)。最后,我們需要再次修改BizDemo核心插件的代碼和部分聲明,使之支持對所有擴展了該插件的BizDemo擴展插件的角色信息動態(tài)提取:
  • 創(chuàng)建一個DynaRoleInfo 類,并定義和清單6所列項對應(yīng)的屬性,用來動態(tài)保存從每個角色擴展插件中讀出的信息;
  • 創(chuàng)建一個RoleManager類治理所有DynaRoleInfo的實例。該類提供靜態(tài)屬性Map roleList和相關(guān)的get-set方法完成運行時對DynaRoleInfo的實例的加入和查詢。具體實現(xiàn)時,可以使用每個動態(tài)角色信息中的id作為Map的key,而將相應(yīng)的DynaRoleInfo實例作為Map的object;
  • 創(chuàng)建一個RoleProviderInfo類用來解析每個BizDemo擴展插件中的bizdemo-role.xml文件,并將信息加載到一個DynaRoleInfo實例中。RoleProviderInfo類的代碼邏輯可以只實現(xiàn)對一個bizdemo-role.xml文件的解析,而將所有對擴展了核心Palette插件的插件集合的迭代放到RoleManager中完成。例如,RoleManager提供initialize方法來完成該邏輯: RSA中UML建模元素的擴展與定制(1)(圖十二)
    點擊查看大圖
RoleProviderInfo的構(gòu)造函數(shù)將定位參數(shù)提供的擴展點入口所屬的插件,并由此找到相應(yīng)的bizdemo-role.xml,完成解析:RSA中UML建模元素的擴展與定制(1)(圖六)
點擊查看大圖
最后,我們需要做兩個代碼段的修改。首先如第3節(jié)所述的那樣,添加一個繼續(xù)了com.ibm.xtools.presentation.internal.tools.CreationTool的DynaCreationTool,并在BizdemoPaletteFactory的createTool方法中添加一個if分支:……new DynaCreationTool (UMLType.CLASS);更多的請看:http://www.qqread.com/windows/2003/index.html
  其次,我們需要修改BizDemo核心插件中DynaRoleInfo類的屬性,使之包含所有定制的屬性的集合。應(yīng)該說,BizDemo核心插件規(guī)定了定制屬性的集合及其在bizdemo-role.xml的描述語法(類似清單4的bizdemoProviders.exsd),并依據(jù)它完成DynaRoleInfo類的定義。而每個BizDemo擴展插件的bizdemo-role.xml只是選擇表達自身語義的一部分屬性進行描述。類似的,我們需要在RoleProviderInfo類中修改相關(guān)的XML解析邏輯,以加入對定制信息的解釋支持。最為要害的是下一步。由于RSA認為UML模型和UML圖屬于不同的分類體系(而實際上確實如此,UML模型表達了模型自身的屬性和關(guān)系,UML圖則給出了模型的一個圖形化的顯示方案),一個具體的UML元素通過Palette被生成到UML圖的過程中,兩者在不同時刻生成。如構(gòu)造型這樣屬于UML模型的元素在UML元素被繪制到UML圖之前就被加入到工具項的結(jié)果對象中。而如背景色這樣屬于UML圖的元素則在真正在圖上繪制生成的結(jié)果對象時才被加載。反映到我們的解決方法上,對于構(gòu)造型,我們必須修改BizdemoPaletteFactory使得創(chuàng)建的UML元素不簡單是個Class。辦法是
  • 創(chuàng)建如下的一個非凡的Classifier DYNACLASSROLE,并在BizdemoPaletteFactory的DynaCreationTool方法中要求對于"國外提供商"創(chuàng)建的結(jié)果對象是這個DYNACLASSROLE:RSA中UML建模元素的擴展與定制(1)(圖十三)
  • 在BizDemo核心插件的plugin.xml中加入如下的聲明RSA中UML建模元素的擴展與定制(1)(圖十四)
    點擊查看大圖

    該聲明對com.ibm.xtools.presentation.semanticProviders擴展點進行了擴展,在用于擴展的類bizdemo.palette.DynaSemanticProvider的getCreateComponentElementCommand方法中,要求用CreateBizDemoCommand類(繼續(xù)了com.ibm.xtools.uml.core.internal.commands.CreateClassifierCommand)的構(gòu)造函數(shù)返回結(jié)果對象:RSA中UML建模元素的擴展與定制(1)(圖十五)
  • 最后,在CreateBizDemoCommand類的doExecute方法中在返回缺省創(chuàng)建的UML結(jié)果對象前應(yīng)用該構(gòu)造型: 背景色的定制要簡單一些,實現(xiàn)它的要害在于捕捉在RSA的UML圖編輯器中創(chuàng)建UML對象這一事件:RSA中UML建模元素的擴展與定制(1)(圖十六)
  • 在Palette的核心插件plugin.xml中添加如下聲明:RSA中UML建模元素的擴展與定制(1)(圖十七) 該聲明用自定義的類bizdemo.palette.actions.BizdemoCustomizationAction對org.eclipse.ui.actionSets擴展點進行了擴展。
  • 類bizdemo.palette.actions.BizdemoCustomizationAction繼續(xù)了org.eclipse.ui.IworkbenchWindowActionDelegate,能捕捉Eclipse中多類UI操作產(chǎn)生的事件,這里我們只選用selectionChanged,因為當一個新的UML元素在UML圖中生成時,總是選中新創(chuàng)建的元素,因而觸發(fā)該事件:RSA中UML建模元素的擴展與定制(1)(圖十八)
    點擊查看大圖
這里尤其要注重的是,由于設(shè)置背景色輸入更新操作,所以在如上代碼片斷第3行創(chuàng)建的資源操作類一定是ResourceSetModifyOperation,而不能是ResourceSetReadOperation,否則將因為資源處于只讀狀態(tài)而拋出異常。采用本節(jié)所述的定制方式,對網(wǎng)上電子零售業(yè)務(wù)中的所有角色進行定制后的模型界面如下圖所示:圖4 使用BizDemo擴展Palette工具項進行網(wǎng)上電子零售業(yè)務(wù)建模 RSA中UML建模元素的擴展與定制(1)(圖十九)6 總結(jié)從本文的介紹可以看出,由于RSA是基于Eclipse技術(shù)搭建起來的,架構(gòu)師或者開發(fā)人員在使用RSA提供的環(huán)境進行業(yè)務(wù)建模時,假如需要對相關(guān)的UI組件進行擴展,一般都可以考慮應(yīng)用RSA內(nèi)部實現(xiàn)該組件的插件的擴展點,編寫新的插件,并在plugin.xml中的擴展點對應(yīng)的標簽內(nèi)遵循XML模式定義進行擴展描述。假如確實需要在運行時動態(tài)加載相關(guān)擴展,則可以進一步在新的插件中暴露擴展點,并為未來擴展該插件的插件工程約定擴展項的描述規(guī)范。需要非凡指出的是,本文對Palette擴展的技術(shù)實現(xiàn)是基于RSA 6.0.0.1版本中標準Palette實現(xiàn)的API。假如RSA在未來被升級,這些API可能會有所變化,從而造成文中所涉及的相關(guān)代碼和配置將不再準確。但是開發(fā)人員仍然可以復(fù)用本文的實現(xiàn)思想進行相關(guān)調(diào)整,從而保證應(yīng)用開發(fā)的正常進行。(責任編輯:銘銘)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 河南省| 利川市| 乌海市| 怀来县| 子洲县| 巴塘县| 隆子县| 凤台县| 永仁县| 顺义区| 横峰县| 东平县| 霍山县| 张北县| 华坪县| 兰考县| 望奎县| 吐鲁番市| 礼泉县| 卢湾区| 龙岩市| 海晏县| 突泉县| 资溪县| 涪陵区| 内黄县| 南丰县| 无锡市| 寿光市| 青州市| 峡江县| 六枝特区| 灵武市| 迁西县| 曲松县| 迁西县| 突泉县| 台湾省| 奎屯市| 武强县| 富锦市|