在关于数据库和 GUI 的模型代码中使用枚举时减少代码重复
Reducing code duplication when using enums in model code with respects to database and GUI
我的一个模型中有一个枚举 类 所以我不必担心传递给它的错误值。
我遇到的问题是,由于上述枚举,我的代码中有很多代码重复。每当我想更改枚举时,我还必须更改代码的这些部分才能使整个工作正常进行:
- 更改枚举本身
- 更改 SQL table 定义(我使用 MySql 枚举)
- 更改我的数据访问层中的 enumToString 转换 table(我需要 sql 查询的字符串)
- 在我的数据访问层中更改 stringToEnum 转换 table(将检索到的值转换回正确的枚举条目)
- 为我的 GUI 用法更改 enumToPrettyString 转换 table(显示人类可读的字符串而不是数据库存储的字符串)
- 更改所有可用枚举条目的列表,这样我就可以在我的 GUI 中为下拉框填充所有可能的条目,供用户 select
我知道 Javas 枚举 类 更强大,您可以直接在枚举条目定义中添加很多此类信息,但 C++ 枚举在内部只是整数,所以我没有那么方便.
有什么想法可以最大限度地减少代码重复吗?
这是代码生成的一个很好的候选者。为您的枚举编写一个规范,然后在您的所有语言环境中从中生成所有需要的翻译代码。利用您的构建系统使所有内容保持最新。主要的陷阱是,如果你曾经存储或序列化低级整数表示,你需要小心不要删除/重新使用任何枚举构造函数(只需在末尾添加新的)。
我的一个模型中有一个枚举 类 所以我不必担心传递给它的错误值。
我遇到的问题是,由于上述枚举,我的代码中有很多代码重复。每当我想更改枚举时,我还必须更改代码的这些部分才能使整个工作正常进行:
- 更改枚举本身
- 更改 SQL table 定义(我使用 MySql 枚举)
- 更改我的数据访问层中的 enumToString 转换 table(我需要 sql 查询的字符串)
- 在我的数据访问层中更改 stringToEnum 转换 table(将检索到的值转换回正确的枚举条目)
- 为我的 GUI 用法更改 enumToPrettyString 转换 table(显示人类可读的字符串而不是数据库存储的字符串)
- 更改所有可用枚举条目的列表,这样我就可以在我的 GUI 中为下拉框填充所有可能的条目,供用户 select
我知道 Javas 枚举 类 更强大,您可以直接在枚举条目定义中添加很多此类信息,但 C++ 枚举在内部只是整数,所以我没有那么方便.
有什么想法可以最大限度地减少代码重复吗?
这是代码生成的一个很好的候选者。为您的枚举编写一个规范,然后在您的所有语言环境中从中生成所有需要的翻译代码。利用您的构建系统使所有内容保持最新。主要的陷阱是,如果你曾经存储或序列化低级整数表示,你需要小心不要删除/重新使用任何枚举构造函数(只需在末尾添加新的)。