在注解属性中,有没有避免使用魔法数字的方法?

3

我有这段代码,分布在不同的实例中,使用了MVC Foolproof Validation中的RequiredIf属性。

[Display(Name = "ID Number")]
[RequiredIf("CitizenshipId", 1)]
public string IdNumber { get; set; }

但是我真正想要的是:
[RequiredIf("CitizenshipId", GetId("SA Citizen")]

现在,正如我认为其他许多开发人员也希望的那样,是要消除魔数1。目前,我想到的只是一个查找函数参数的字符串名称,该函数必须进行查找。将1变成“1”就很糟糕。
注意:常量在这里并不理想,因为上面的魔数是指数据库的PK。我认为这也不理想,我应该添加第三列来生成每个查找条目的“常量代码”,无论PK和文本如何,我们仍然有一个不可变的值。
NB 注意:我正在Orchard内部工作,所以不要使用自定义提供程序。

3
属性参数可以是“const”成员。 - Ani
1
最好将它们称为“魔法值”,因为它们可以是任何在定义时被指定的常量。 - Robert Koritnik
@ani,在这种情况下,魔数是一个主键,这就是为什么我想要查找它而不是将其编码为常量的原因。 - ProfK
2个回答

3

我使用了FluentValidator,它比Attributes更灵活。绝对更容易测试。


2

您最好使用常量。

  1. 现有属性无法更改。
  2. 对于属性,不支持泛型。
  3. 不能使用Lambda表达式,因为属性构造函数(以及属性)只能包含常量表达式。

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