2010-07-07 25 views
6

我從事EMF項目。其中一個設計決定不是觸及生成的代碼,也不是檢查它。相反,無論何時需要更改,都會創建一個包含更改的子類。該框架足夠靈活來處理這個問題。但是,我經歷了一些工作開銷。更改生成的代碼或使用繼承?

設計決策是在糟糕經驗的基礎上做出的,其他代碼生成框架都是通過重新生成讓問題發生。

作爲新項目我想挑戰設計決策,但希望首先聽到一般性意見。我知道EMF項目團隊推薦進行代碼更改。但你有什麼經驗? EMF在生成的代碼中如何處理手動代碼更改?你有沒有來到你失去手動書面代碼的地步?代碼是否進入不可維護狀態?

+0

得到了一個從斯蒂芬真正有用的答案,但很想聽到更多! – 2010-07-13 07:30:36

回答

6

但你有什麼經驗?

我已經實現了兩個單獨的項目,這兩個項目都涉及具有50個或更多模型類的模型,並且在這兩種情況下模型都在項目的整個生命週期中演變;即批號的型號改變。在這兩種情況下,我都將生成的代碼修改爲通常實現計算屬性,驗證以及以各種方式定製編輯器。

EMF在生成的代碼中如何處理手動代碼更改?

它運作良好。偶爾,生成器生成的代碼由於某些模型更改而無法編譯,但修復通常很簡單;例如刪除Java類/接口,死進口等。

您是否曾經到過丟失手動編寫代碼的地步?

只有非常偶爾。偶爾會忘記刪除「生成」標記註釋,並且在重新生成模型時,您的方法會遭到破壞。

(我想,如果這是一個主要問題,你可以在變更合併之前修改EMF生成始終備份源代碼樹。)

我想這是最惱人的是,生成的代碼必須是格式化。 不幸的是,Eclipse代碼格式化程序非常糟糕,但是如果您手動重新格式化,則在下次重新生成格式更改時,格式化更改會受到影響。但這只是令人煩惱......不值得跳過籃球來避免。

代碼是否進入不可維護狀態?

沒有。永遠不會。


閱讀consta_a的答案提醒我,我總是檢查我生成的EMF類到版本控制。這是避免長期丟失手部編輯的最佳方法。

0

我確認Stephen C答案:在我們的例子中,我們處理120個類,這意味着120個接口+ 120個實現類+無數的編輯類和重新生成相當好(如果我們可以很容易地生成的類格式化(^ _ ^))

提示:如果您擔心丟失一些手工製作的代碼,最好的做法是將代碼保存在存儲庫中。每當你做出改變時,你都可以輕鬆地與以前的版本進行比較,看看改變了什麼。