Language agnostic 与幻数作战中的参考表值

Language agnostic 与幻数作战中的参考表值,language-agnostic,data-structures,Language Agnostic,Data Structures,这个问题困扰了我好几年,似乎仍然找不到好的解决办法。我在PHP和Java中工作,但听起来好像是这样的,可能是语言不可知:) 假设我们有一个标准的状态引用表,其中包含某种实体的状态ID。进一步假设该表只有5个值,并且在很长一段时间内保持这种状态,可能偶尔会添加一个新的状态进行编辑。 当您获取一行并需要查看它的状态时,您有两个选项(至少在我看来是这样)-直接输入ID值(即神奇的数字)或使用命名常量。后者看起来更干净,但问题是那些命名常量应该放在哪里?在模特班?在使用此特定常量的类中?其他地方 听起来

这个问题困扰了我好几年,似乎仍然找不到好的解决办法。我在PHP和Java中工作,但听起来好像是这样的,可能是语言不可知:)

假设我们有一个标准的状态引用表,其中包含某种实体的状态ID。进一步假设该表只有5个值,并且在很长一段时间内保持这种状态,可能偶尔会添加一个新的状态进行编辑。
当您获取一行并需要查看它的状态时,您有两个选项(至少在我看来是这样)-直接输入ID值(即神奇的数字)或使用命名常量。后者看起来更干净,但问题是那些命名常量应该放在哪里?在模特班?在使用此特定常量的类中?其他地方

听起来您想要做的是一个枚举值

这是一个将文字名称映射到常量值的值,类似于

Statusone = 1
Statustwo = 2
然后,在程序中的任何地方,您都可以引用statusone,编译器会将其视为1

我不确定这在php中是否存在,但我很确定它在java中存在

编辑以回应某些评论


我通常会将枚举值放在某种全局名称空间中,或者如果您仅在使用该类时需要它们,您可以将它们放在类级别。

您甚至可以在某些关系类中使用枚举databases@timmahy我以为你能做到但我不确定你能用什么样的枚举法,或者只是简单的常量。这不是问题:)问题是-你把它们放在哪里?我认为最好(在可能的情况下)在代码和关系数据库中使用枚举。。。。您可以编写一个单元测试来验证它们是否“同步”,从而释放一些魔力:)枚举的主要优点是您可以在编译时进行类型安全检查。