繁体   English   中英

最佳实践:使用枚举或不存储下拉值

[英]Best practice : use enum or not to store dropdown values

我正在开发一个应用程序,我经常问自己同样的问题。

例如,我有许多类型的用户,并且在用于创建用户的表单中,有一个下拉列表,用于指定哪种类型的用户。

填充此下拉列表的最佳方法是将值存储在数据库的表中? 如果我这样做,当我开发时,我想测试用户类型,我只有一个int。 但我认为使用枚举进行测试是一种更好的做法。 所以我创建枚举,但我觉得这是一个不好的做法,因为我必须保持数据库和枚举同步。

另一个问题是关于本地化。 如果我把值放在数据库中,我就不能使用资源文件了。

你能告诉我这方面的好心情吗?

谢谢

在你的情况下 - 数据库将是这里的最佳实践,特别是如果它的动态数据。 枚举是针对那些很少改变的值,可能是偶尔但不是经常发生的。 您可能会定期在数据库中输入新条目,尤其是级联下拉列表等内容。

数据库肯定是你的情况的方式。 枚举存在于那些只是一个标准并且很少改变的时候,例如:

小姐先生。太太女士博士

你会在枚举中有这些,因为它们永远不会真正改变。 另一方面,如果要更改或重命名商店部门,数据库将是存储此类条目的地方。

我强烈不同意使用枚举这种功能,基本上有两个原因:

  • 枚举值没有行为,因此妥协良好的OOP。 一个好的类具有数据+行为,因此枚举成员不足以专门表示它们的命名概念。 关于这个域对象的逻辑生活在除了其名称的实体之外的其他地方,我不喜欢。
  • 枚举是为了传达正常性,所以DaysOfWeek是一个很好的用法(除了一周中的哪一天是'第一'取决于文化,但是'挑剔),因为枚举表示其成员的顺序 在您的情况下,说某个特定值是“第一个”用户类型,第二个值是第二个,依此类推是否有意义? 可能不是。

我的第一个问题是 - 你真的在数据库中的任何地方使用用户类型吗? 如果答案是否定的,那么一切都会变得更容易,因为你可以简单地使用枚举并完成它。

否则,您可能还应该有一个用户类型表,以便正确使用外键。

就个人而言,我使用手动ID - 自动生成的密钥可能会使您尝试同步代码和数据库变得混乱。 理想情况下,如果您的ORM允许,您可以通过代码生成或自动数据库数据更新自动进行代码 - 数据库同步。 但是,如果不能,那么手动编码枚举(或某种伪枚举)应该在代码中更好。

至于本地化,您的选择完全相同。 只需使用“UserType-XXX”之类的资源键,其中XXX是该类型的数据库ID。 如果需要,还可以将本地化值存储在数据库中。 只要做最适合您的应用的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM