从您提供的信息来看,StatusID
在不同的数据库中可能有不同的值,大概是因为您的密钥是自动生成的,而不是您指定的。如果是这样,那么显然StatusID
无论如何都不可能在您的代码中始终如一地使用(没有标准化值)。因此,问题变成“在我的代码中硬编码值是否可以接受/实用/可取StatusName
?”
显而易见的答案是肯定的,有什么替代方案?如果您有某种表示“就绪”的状态并且您想在代码中引用它,那么您必须在代码中添加一些明确标识状态的内容。
如果您添加某种类型的第二个键(如 Carlos 建议的那样),您仍然会遇到相同的基本问题,即更改自然键值正在更改状态的标识,因此会更改代码的含义。如果您更改“真正的”自然键 ( READY
) 而不更改第二个键 ( RDY
),那么您的代码将变得更加混乱且难以维护。
如果您执行更复杂的操作,例如将“常量”或“配置参数”提取到配置文件或表中,或者甚至编写自定义预处理器以在部署时将键值插入脚本中,那么您会增加很多复杂性而收效甚微(除非你有其他充分的理由这样做)。我已经看到使用这种方法,这是一个巨大的、无法维护的混乱。
在实践中,StatusName
最有可能发生变化是因为 a) 有人认为另一个名称会“更准确”或“看起来更好”,或者 b) 您发现它不能正确地代表您的要求。如果您被迫花时间在 a) 上,那么只需更改前端或报告中的显示名称,而无需理会数据库和代码。如果 b) 出现,那么根据定义,您当前的数据模型和代码是不准确的,无论如何都必须修改和可能修改。而当 b) 确实发生时,它通常会导致添加新代码,而不是更改现有代码(例如,因为有人定义了一个没有现有代码的新流程步骤)。
如果你愿意改变你的开发和部署实践,还有其他方法来看待这个问题,正如其他人所建议的那样。你能让你的StatusID
价值观在任何地方都一样吗?从技术上讲这是可能的,那么组织上不这样做的原因是什么?您能否StatusName
通过变更管理和代码审查来降低变更的可能性和影响?您能否改进您的需求流程以更有效地捕获某些信息?