通常,最佳实践是使用命名常量代替幻数,但保持数据库引用表和命名常量文件同步肯定是乏味且容易出错的。是否有一些简单的方法可以使这两个信息来源保持同步,或者我是否忽略了明显的设计增强?
如果我的问题不清楚,这里有一个例子。我有一个包含 2 列的参考表:
UserStatus
----------
UserStatusID
UserStatus
Run Code Online (Sandbox Code Playgroud)
因此,该表将 UsersStatusID 1 与 UserStatus“Active”相关联。User 表依赖此表来规范化 UserStatuses。
因此,当从代码查询用户的状态时,我有两个选择:
SELECT UserStatusID FROM Users WHERE UserStatus = 1
Run Code Online (Sandbox Code Playgroud)
或者
SELECT UserStatusID FROM Users WHERE UserStatus = ACTIVE_USER_STATUS_ID
Run Code Online (Sandbox Code Playgroud)
最佳实践是使用后者,这样数字 1 的含义就很清楚了。但这意味着我必须在 UserStatus 表和代码中维护有效 UserStatusID 的完整列表。如何避免必须更新数据库引用表和常量文件?我使用的是集中式常量文件,因此只有 1 个位置需要更新代码,但是有没有办法在引入新状态时完全避免更新常量文件?
我有一个想法:安排一个脚本每天运行一次,通过查询数据库中的引用表来填充常量文件。这是最好的解决方案吗?
将常量保存在数据库中。根据需要查询它们。
如果性能是一个问题,则在应用程序启动时将所有常量加载到内部数据结构中,然后在整个应用程序中使用它。
所以你的代码示例将是:
SELECT UserStatusID
FROM Users
WHERE UserStatus = (
SELECT INTEGER_VALUE
from DB_CONSTANTS
WHERE CONSTANT_ID = 'ACTIVE_USER_STATUS_ID'
)
Run Code Online (Sandbox Code Playgroud)
或者,如果使用内部结构,它会更像这样:
SELECT UserStatusID
FROM Users
WHERE UserStatus = g_Constants.ActiveUserStatusID;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1113 次 |
| 最近记录: |