使用幻数是好习惯吗?

Is it good practice to use magic numbers?

我正在制作一个网络应用程序。在服务器端的某些情况下,我正在进行 mysql 查询,其中我基本上说 where d.id=2 意味着我将外键硬编码到另一个 table。或者在客户端,我有一个带有单选字段的表单,输入字段值是 table 的主键的 ID 号(例如 1、2、3)。

我想知道是在使用这些 'magic numbers' 好的做法,还是应该在查询(需要连接)和表单中使用字符串值作为输入值,然后我会在哪里需要通过查询使用该字符串值获取 ID。

这似乎是两种方式,如果我需要编辑 table 行(更改主键值或字符串值),那么我将不得不更新客户端和服务器端的所有内容。

什么是好的做法?

谢谢

ID 号通常由数据库任意分配(例如 MySQL AUTO_INCREMENT),它们只是时间上的意外。依赖它们并将它们硬编码到您的代码中通常不是一个好主意。相应的名字不太可能改变,所以如果你必须硬编码一些东西,那通常更安全。

此外,硬编码 ID 使代码更难理解。幻数对 reader 没有固有意义,但字符串是助记符。

这是格式化的评论。由于 omega 要求提供示例,这里是一个使用 ColdFusion 语法的示例

<cfquery name="getChoices">
select choiceId, choice
from choices
</cfquery>

<form>
<cfoutput query = "getChoices">
<input type = "radio" name="theChoice" value = "#choiceID#">#choice#
</cfoutput>
<input type="submit>
</form>

请注意,cfoutput 标记循环遍历查询结果。