2012-09-05 76 views
3

我有一個最終輸出EMF模型的模型轉換序列,這是一些EMF元模型(我自己定義的元模型)的實例。使用Xtext或XTend爲現有的EMF模型構建代碼生成器

我正在尋找一個很好的方法來從此生成代碼。當然,還有XPand,我曾經用它來做其他項目,但我想知道XText或XTend是否是一個合適的替代品(因爲它是如此積極開發的)。

換句話說,我有一個EMF模型,不需要它的編輯器(所以不需要XText用於這個目的),但我需要構建一個代碼生成器。我可以只使用XText嗎?

而且它會建議在XPand或Acceleo?

任何建議將是偉大的。

回答

3

我試圖在工具之間做一個公平的比較,但它確實很難。

Xtext與代碼生成無關 - 它用於創建編輯器和分析器。

Xtend2被設計成Xpand的繼承者,它具有相似的語法 - 然而,它不是專門爲代碼生成而定製的,而是作爲一種通用語言,它也可以很好地用於代碼生成。其他代引擎的主要區別在於你在源代碼級別上工作(基本上,Xtend2轉換爲Java),並且你必須提供自己的引擎來驅動代 - 儘管當然可以使用Modeling Workflow Engine for這個原因 - 就像Xpand一樣。

Acceleo更適合簡單的代碼生成。它的語法基於用於代碼生成的OMG規範,並提供了用於開發代碼生成的全功能IDE。但是,如果在代碼生成過程中需要複雜的控制結構,它可能不是最好的解決方案。

關於M2T-JET,正如克里斯建議的那樣,除了非常具體的需求,我會投反對票。它的開發支持比較弱(例如它是編輯器),更多的基於這樣的想法,即有一個用於輸出的模板,而不是Xpand/Xtend/Acceleo的基於規則的更高級別的方法。這會在代碼生成過程中產生更好的性能,但是,這往往會導致難以理解模板。忽略此段,因爲它太負面。總而言之,如果您僅使用EMF模型,Acceleo和Xtend都可以成爲代碼生成的不錯選擇,您應該根據您(或您的團隊)的專業知識和您的更具體的需求在它們之間做出選擇。如果您需要同時支持EMF模型和其他數據源,那麼Acceleo不是最佳選擇;然而,JET和Xtend都沒有建立在你的輸入是EMF模型的事實上,而是提供了簡單的方法來調用任何可用的Java代碼。

+0

好吧,你是對的 - 我很抱歉。我不想對JET產生負面影響。它的能力在那裏,只會讓我感覺使用起來更麻煩。我將該段標記爲已刪除。 –

+0

將嘗試xtend,因爲sven efftinge也只是在Twitter上向我推薦。我知道我需要做一些工作來獲得模型作爲輸入,但在事物的宏偉計劃中,這可能不是很多工作。我在某處讀到XTend執行得比XP還快得多 –

+0

@ChrisGerken我使用Acceleo生成Swing編輯器(甚至是CRUDS),ESB中介以及Spring/JPA/Flex應用程序。 JET比Acceleo/XTend更復雜的事實與JET儘可能完整的事實沒有衝突。 – Tcharl

-1

我推薦M2T-JET。這是一個基於文本模板的轉換,它使用多個模板從單個輸入模型生成項目,文件夾和文件。該模型可以是EMF,模板可以讓您瀏覽並遍歷模型,以生成您想要的Eclipse資源。

+0

這只是證明你不明白JET。請不要評論你不明白的技術,特別是當你有明顯的偏見時。 –