2016-07-29 49 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

这是一个很好的候选代码生成。为您的枚举编写单一规范,然后在您的所有语言环境中生成所有必需的翻译代码。利用您的构建系统保持最新的一切。主要的缺点是,如果你存储或序列化低级整数表示,你必须小心,不要删除/重新使用任何枚举构造函数(只需在末尾添加新的构造函数)。