c++ - 在关于数据库和 GUI 的模型代码中使用枚举时减少代码重复

标签 c++ enums code-duplication

我的一个模型类中有一个枚举,所以我不必担心将错误的值传递给它。

我遇到的问题是,由于上述枚举,我的代码中有很多重复代码。每当我想更改枚举时,我还必须更改代码的这些部分才能使整个过程正常工作:

  • 更改枚举本身
  • 更改 SQL 表定义(我使用 MySql 枚举)
  • 更改我的数据访问层中的 enumToString 转换表(我需要 sql 查询的字符串)
  • 更改我的数据访问层中的 stringToEnum 转换表(将检索到的值转换回正确的枚举条目)
  • 为我的 GUI 使用更改 enumToPrettyString 转换表(显示人类可读的字符串而不是数据库存储的字符串)
  • 更改所有可用枚举条目的列表,以便我可以在我的 GUI 中填写一个下拉框,其中包含所有可能的条目供用户选择

我知道 Javas 枚举类更强大,您可以直接在枚举条目定义中添加很多此类信息,但 C++ 枚举在内部只是整数,所以我不方便。

有什么想法可以最大限度地减少代码重复吗?

最佳答案

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

关于c++ - 在关于数据库和 GUI 的模型代码中使用枚举时减少代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38654371/

相关文章:

c# - 如何在保持可读性的同时使用多个构造函数来删除重复代码?

c++ - 在 C++ 中为每个平台定义函数的首选方法是什么

c++ - 将 fstream 数据写入磁盘时如何检测 fatal error ?

javascript - 枚举成员如何在 TypeScript 中使用别名?

docker - docker compose 有没有办法创建交叉服务常量?

javascript - 在 ExtJS6 中创建电子邮件字段组件

c++ - Tcl fileevent 在 64 位版本的 Tcl 上挂起

c++ - 一个生产者线程,多个消费者

enums - 使用 protobuf 枚举值作为字段编号

c# - 我怎样才能一般地转换一个枚举?