将命名常量保持在代码和数据库参考表中同步的最佳实践是什么?

5

通常最佳实践是使用命名常量代替神奇数字,但是维护一个数据库参考表和一个命名常量文件的同步确实很繁琐且容易出错。有没有一种简单的方法来保持这两个信息源的同步,或者我是否忽略了一种明显的设计增强方式?

如果我的问题不清楚,这里有一个例子。我有一个带有2列的参考表:

UserStatus
----------
UserStatusID
UserStatus

这个表将UsersStatusID 1与用户状态“Active”相关联。User表依赖于这个表来规范化用户状态。

因此,在从代码查询用户状态时,我有两个选项:

SELECT UserStatusID FROM Users WHERE UserStatus = 1

或者

SELECT UserStatusID FROM Users WHERE UserStatus = ACTIVE_USER_STATUS_ID

最佳实践是使用后者,这样数字1的含义就很清楚了。但这意味着我必须在我的UserStatus表和代码中维护一个完整的有效UserStatusID列表。如何避免需要同时更新数据库参考表和常量文件?我正在使用一个集中的常量文件,所以只需要在一个地方更新我的代码,但是否有一种方法可以避免在引入新状态时更新常量文件?
我有一个想法:安排一个脚本每天运行一次,通过查询数据库中的参考表来填充常量文件。这是最好的解决方案吗?
1个回答

3

将常量保存在数据库中,需要时查询它们。

如果性能是一个问题,那么在应用程序启动时将所有常量加载到内部数据结构中,然后在整个应用程序中使用该数据结构。

因此,您的代码示例应如下:

SELECT UserStatusID
FROM Users 
WHERE UserStatus = (
                   SELECT INTEGER_VALUE
                   from DB_CONSTANTS
                   WHERE CONSTANT_ID = 'ACTIVE_USER_STATUS_ID'
                   )

或者,如果您使用内部结构,则会更像这样:
SELECT UserStatusID
FROM Users 
WHERE UserStatus = g_Constants.ActiveUserStatusID;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接