Posted on 2005-01-23 21:46
wxb_nudt 閱讀(2327)
評(píng)論(2) 編輯 收藏 所屬分類:
技術(shù)雜談
??? 這個(gè)問(wèn)題的提問(wèn)方式似乎有點(diǎn)問(wèn)題。首先,ROSE是否是一種MDA工具還有待商榷。雖然Rose是出現(xiàn)在MDA概念出現(xiàn)之前的一種CASE工具,但是也不能主觀的把它排除在MDA工具之外。所謂MDA(模型驅(qū)動(dòng)架構(gòu)),就是以模型為中心的開(kāi)發(fā)方法的架構(gòu)。其中的模型有4個(gè)層次的概念,MOF的四層模型結(jié)構(gòu)詳細(xì)描述這四層模型結(jié)構(gòu),但是目前應(yīng)用最多,影響最大還是M1層模型,因?yàn)樗梢灾苯愚D(zhuǎn)換為代碼,極大的提高軟件開(kāi)發(fā)的速度和質(zhì)量。而在M1層模型中,遵循UML規(guī)范的模型又是事實(shí)上的標(biāo)準(zhǔn),因此OMG(對(duì)象管理組織,MDA的提出和倡導(dǎo)者)吸納了UML作為MDA的核心部分,MOF也把UML元模型作為M2層的代表之作。因此,UML的領(lǐng)軍開(kāi)發(fā)環(huán)境RationalRose似乎可以歸入MDA的工具之列了。
??? 但是問(wèn)題還是要討論的,不過(guò)提問(wèn)的方式可以改成“Rose生成的代碼框架和如今流行的MDA工具生成的代碼有什么不同?”如今流行的MDA工具,除了ROSE之外(好像Rose給人們的印象根深蒂固了,就是CASE工具的代表之作,而不是MDA工具),還有ArcStyler,OptimalJ和EMF(Eclipse Model Framework)以及ArgoMDA等等。這里我只接觸過(guò)ArcStyler和EMF,因此以它們?yōu)槔齺?lái)說(shuō)一下。
??? 首先還是先說(shuō)說(shuō)Rose,Rose可以從UML模型生成代碼框架,不過(guò)只有類圖可以生成代碼,也就是說(shuō)例如用況圖(我是按國(guó)家標(biāo)準(zhǔn)使用“用況”這個(gè)詞的啊,不信的人去查查,雖然一般都叫“用例”),時(shí)序圖等等都不能生成代碼。也就是說(shuō)只有軟件的結(jié)構(gòu)特性可以直接生成代碼,而軟件的處理流程是不能生成代碼的。而類圖生成的代碼也忠實(shí)的保持了類圖中的信息,不多不少,也就是說(shuō)它正好是UML類圖的信息等價(jià)體。(這一點(diǎn)我也是按照我的經(jīng)驗(yàn)說(shuō)的,望有知著教我。)
??? 而現(xiàn)在的MDA工具就是在兩個(gè)方向突破,例如ArcStyler,它不止能夠?qū)④浖慕Y(jié)構(gòu)特性生成為代碼框架,還可以將軟件的部分處理流程生成代碼。例如它的WebAccessor可以將Web應(yīng)用的部分典型流程通過(guò)建模的方式表達(dá)出來(lái),然后直接生成代碼表現(xiàn)這些流程,不止如此,還可以自動(dòng)生成編譯和配置文件。關(guān)于ArcStyler的WebAccessor的使用簡(jiǎn)介,可以到
www.mdachina.net上面查找我曾經(jīng)寫(xiě)過(guò)的文章。
??? EMF選擇了另一個(gè)方向作為突破口,它也是只能將類圖轉(zhuǎn)換為代碼框架,不過(guò)它生成的代碼有了擴(kuò)充的功能,也就是說(shuō),它的代碼增加了許多不能在UML類圖中表達(dá)的功能。我將這些功能總結(jié)如下:包括反射機(jī)制(不同于java的反射機(jī)制,而是ECORE模型的反射機(jī)制)、通告服務(wù)(當(dāng)對(duì)象改變時(shí)會(huì)通告給監(jiān)聽(tīng)者,這又叫做觀察者/適配器模式?)、工廠模式(所有對(duì)象都使用對(duì)象工廠產(chǎn)生出來(lái),保持接口和實(shí)現(xiàn)的分離)、存儲(chǔ)機(jī)制(自動(dòng)將對(duì)象存儲(chǔ)為XMI文檔,并可以從XMI中讀取數(shù)據(jù)來(lái)構(gòu)建對(duì)象)。還有為Eclipse的SWT界面庫(kù)所生成的部分界面代碼,利用此界面代碼可以方便的生成本地UI界面控制生成的對(duì)象。
??? 所以說(shuō),現(xiàn)在的MDA工具在代碼生成部分(除了代碼生成,應(yīng)該還有元建模,模型轉(zhuǎn)換等部分),向著兩個(gè)方向努力,這些努力提供給開(kāi)發(fā)者Rose的代碼框架所不能提供的一些功能。遺憾的是,關(guān)于MDA并沒(méi)有一個(gè)統(tǒng)一而可行的代碼生成標(biāo)準(zhǔn),因此每使用一個(gè)新的MDA工具都必須熟悉它的一套機(jī)制,否則也只能望代碼而興嘆。路漫漫其修遠(yuǎn)兮~~
??? (最近正在使用EMF,因此忍不住說(shuō)一句,EMF生成的代碼實(shí)在是很帥,方便易用,它提供的幾個(gè)額外功能都能極大的便利java程序的開(kāi)發(fā)。而且,對(duì)于SWT興趣很濃的我,它提供的幾個(gè)界面Provider也實(shí)在可以方便的做出好看的界面,可以是插件界面,也可以是脫離Eclipse的java界面。)