2016-07-29 41 views
0

我在我的模型類中有一個枚舉,所以我不必擔心傳入它的錯誤值。在數據庫和GUI中使用模型代碼中的枚舉時減少代碼重複

我遇到的問題是,由於所述枚舉,我的代碼中有很多代碼重複。每當我想改變枚舉我也不得不改變我的代碼的這些部分,使整個事情的工作:

  • 更改枚舉本身
  • 更改SQL表定義(我使用MySQL枚舉)
  • 更改enumToString轉換表在我的數據訪問層(我需要SQL查詢字符串)
  • 變化在我的數據訪問層的stringToEnum轉換表(檢索到的值轉換回到正確的枚舉條目)
  • 更改我的GUI的enumToPrettyString轉換表用法(顯示人類可讀的字符串,而不是存儲在一個數據庫中)
  • 更改所有可用的枚舉項的列表,以便我可以填寫一個下拉框在我的GUI與所有可能的項供用戶選擇

我知道Javas Enum類更強大,你可以直接在枚舉入口定義中添加很多這些信息,但是C++枚舉在內部只是整數,所以我沒有那麼方便。

任何想法如何我可以儘量減少代碼重複?

+0

你有*'兩個大枚舉* * - 好:(1)什麼意思是「大」:很多元素? (2)你的問題不是獨立於枚舉的數量:減少僅僅是一個枚舉不是更好嗎? – Wolf

+1

你是對的,我將重新解釋這個問題,因爲兩個枚舉都是一樣的。 「大」意味着介於10到30個條目之間。 –

+0

建議創建'DLL/.so',它將提取轉換的所有功能,並提供'DLL/.so'的客戶端所需的東西。通過這種方式,只有在枚舉/刪除/更改'enum'成員/條目時,'enum'定義纔會發生變化。 – sameerkn

回答

2

這是一個很好的候選代碼生成。爲您的枚舉編寫單一規範,然後在您的所有語言環境中生成所有必需的翻譯代碼。利用您的構建系統保持最新的一切。主要的缺點是,如果你存儲或序列化低級整數表示,你必須小心,不要刪除/重新使用任何枚舉構造函數(只需在末尾添加新的構造函數)。