開發(fā) AndroMDA 4 的幾個(gè)原因。實(shí)時(shí)證明AndroMDA 3是當(dāng)今代碼生成任務(wù)最成功的架構(gòu),但已經(jīng)可以看出,它難以應(yīng)付未來新的任務(wù)。AndroMDA 4 架構(gòu)的目標(biāo)有:
可配置和可擴(kuò)展性
我們應(yīng)該讓我們的用戶比以前更容易(重新)配置和擴(kuò)展AndroMDA。用戶應(yīng)該能夠把AndroMDA作為一個(gè)組件使用,可以組織、鏈接,擴(kuò)展和部署,以實(shí)現(xiàn)他們的代碼生成的目標(biāo)??膳渲煤涂蓴U(kuò)展性,必須支持以下功能:
可與其他UML metamodels(元模型)配合工作
AndroMDA 3 是主要用于與UML配合使用。它可以和其他UML元模型配合工作,太糟糕了,沒有人對(duì)其進(jìn)行了測試。
有些事情不容易在UML表示,例如,圖形用戶界面。domain specific languages (DSLs)能夠更好的表述、形容此類事情AndroMDA 4 應(yīng)支持任意的基于metamodels (元模型的)模型輸入。
重用,改造和chaining of off-the-shelf和定制cartridges
在AndroMDA 3中,有可能從頭開始寫一個(gè)cartridge ,使用一個(gè)已有的cartridge或在一定范圍內(nèi)擴(kuò)展已有的cartridge。然而,一個(gè)cartridge輸入模型幾乎總是依賴一個(gè)特定的UML配置文件(profile),使用戶被迫以某種方式建模。一個(gè)fledged的輸入總是“完全成熟”的模型,輸出總是“準(zhǔn)備使用”源代碼。這種方法可以被稱為“百分百方法the always 100% approach”。大面積使用cartridges不可能用非常精細(xì)和復(fù)用,比如:cartridges A 做30%的工作,cartridges B 拿A的輸出最為輸入,完成50%工作,最后cartridges C完成20%的工作,這樣就100%的完成了。
在AndroMDA 4中,用戶應(yīng)該能夠在從模型到代碼的轉(zhuǎn)換中重用已有的cartridges建立blocks 一個(gè)cartridge 把輸入模型轉(zhuǎn)化為一個(gè)或更多的模型或者文本,任何基于元模型的內(nèi)容,cartridges 建可相互配合、來完成工作。
一個(gè)典型的例子是:一個(gè)用戶說:“行,我最喜歡Hibernate的 cartridge ,但我希望所有生成的實(shí)體實(shí)現(xiàn)某些接口”。 這個(gè)用戶可以編寫另一個(gè)cartridge 添加了必要的接口生成的實(shí)體類。最好的辦法來處理,就是用模型到模型轉(zhuǎn)換。
模型到模型轉(zhuǎn)換
這些轉(zhuǎn)化為1..n輸入模式到1..m輸出模式,每個(gè)模型包含在一個(gè)元數(shù)據(jù)儲(chǔ)存庫。對(duì)于轉(zhuǎn)換,我們將使用開放源碼框架ATL。然而,AndroMDA不應(yīng)僅僅依賴于ATL的,但必須能夠使用任何模型到模型轉(zhuǎn)換引擎。
這里,可配置性也是一個(gè)重要方面。轉(zhuǎn)型引擎應(yīng)該能夠訪問AndroMDA配置,以便能夠轉(zhuǎn)換能夠參數(shù)化。我們的解決方式是把AndroMDA配置作為一個(gè)模式,可以像任何其他模型一樣進(jìn)行轉(zhuǎn)換。因此,AndroMDA必須有一個(gè)配置元模型。
支持基于構(gòu)件的開發(fā)
模型往往是隨著時(shí)間的推移逐漸變大。The generator 需要越來越多的時(shí)間來驗(yàn)證模型和生成代碼。應(yīng)該可以運(yùn)行the generator 處理輸入模型的部分內(nèi)容(請(qǐng)注意,在一部分獨(dú)立元模型上,這是可能的)。在AndroMDA 3中,唯一可能的是,限制只產(chǎn)生UML模型中的包的代碼。在AndroMDA 4中,這應(yīng)該只是一個(gè)特例。AndroMDA 4應(yīng)該能夠隨心所欲的產(chǎn)生輸入模型中部分代碼,如:架構(gòu)的一個(gè)切片(MD,怎么切啊)、一個(gè)子集,(實(shí)在是不會(huì)了)a time or one architectural tier at a time or one server at a time or whatever subset of the content of the input model(s)
這需要一個(gè)配置機(jī)制,來增加全局的限制,從而找到那些模型元素需要被轉(zhuǎn)換。
更好的可測性
AndroMDA的每個(gè)組件應(yīng)該很容易testable,as isolated as possible。在設(shè)計(jì)組件的界限和接口時(shí),我們應(yīng)該注意,一個(gè)組件應(yīng)盡可能少的依賴其他組件的成功測試(其他組件需要測試通過后才能測試這個(gè)組件)。
性能和可伸縮性
AndroMDA應(yīng)當(dāng)有很好的性能和執(zhí)行成績,因?yàn)橛脩羯纱a的規(guī)模和的形式在不斷發(fā)展(要不產(chǎn)生代碼越來越費(fèi)勁,費(fèi)時(shí),誰還用啊)。兩種可能的方案,以減少執(zhí)行時(shí)間:
- 僅生成部分模型(參見上面的CBD)
- 增量生成,reacting to changes(未來的功能)
|