【问题标题】:Is there any way of avoiding magic numbers in annotation attributes?有什么方法可以避免注释属性中的幻数?
【发布时间】:2013-01-07 09:31:09
【问题描述】:

我有这段代码,在不同的情况下,使用来自MVC Foolproof ValidationRequiredIf 属性

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

但我真正想要的是

[RequiredIf("CitizenshipId", GetId("SA Citizen")]

现在,我认为其他开发人员也希望消除幻数 1 到目前为止,我想到的只是函数必须查找的查找函数参数的字符串名称。把 1 变成“1”是很糟糕的。

注意:这里的常量并不理想,因为上面的幻数指的是数据库的 PK。我想这也不理想,我应该为每个查找条目添加一个带有“常量代码”的第三列,因此无论 PK 是什么,无论文本是什么,我们仍然有一个不可变的值。

注意:我在 Orchard 内部工作,所以与自定义提供商没有什么有趣的业务。

【问题讨论】:

  • 属性参数可以是const成员。
  • 最好将这些称为magic values,因为它们可以是任何常量就地定义的值。
  • @ani,在这种情况下,幻数是一个 PK,这就是为什么我要查找它而不是将其编码为常量的原因。

标签: c# .net asp.net-mvc c#-4.0


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    最好的办法是使用常量。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多