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