代码之家  ›  专栏  ›  技术社区  ›  jac

是否有理由不使用自定义属性?

  •  1
  • jac  · 技术社区  · 14 年前

    如果我有理由的话,这主要是一个征求意见的请求 沿着这条路走。

    我有一个多层的、由codesmith生成的应用程序。在UI级别,需要一些必需的字段,并且必需的字段将根据绑定实体中的字段值而变化。我想做的是向实体中的每个属性添加一个“propertyrequired”customattribute,当我在其管理器中加载实体时,可以将其设置为true或false。然后,我将使用反射来查询属性,并在用户界面级别向用户提供可视反馈,在保存之前,我可以验证所有必需的属性在管理器中是否具有有效的值。我已经把它作为一个概念的证明,在一个实体中有一个属性,但是在我尝试将它扩展到应用程序的其余部分之前,我想问一下,是否有更有经验的人告诉我去做,或者为什么我不喜欢它,当我扩大规模时。如果这是一个坏主意,或者如果你可以建议一个更好的方法,请提供你的意见。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Marc Gravell    14 年前

    这是一种相当合理的方法(我以前做过类似的事情),但是 总是 缺点:

    • 任何需要实体的代码都需要额外的引用(假设属性和实体在不同的程序集中)
    • 值(除非你很聪明)必须在编译时确定。
    • 不能在控件之外的实体上使用它

    在大多数情况下,上述问题都不是问题。如果他们 问题是,您可能希望支持外部元数据模型,但是 除非 你需要它,这太过分了。除非你必须这样做,否则不要这样做(意思是:继续使用属性;它们是 通常 很好)。

        2
  •  1
  •   JaredPar    14 年前

    没有固有的理由避免自定义属性。它是受支持的CLR功能,是许多可用产品(代码合同、fxcop等)的主干。

        3
  •  0
  •   dbez    14 年前

    这不是一个不合理的方法,比将这些东西烘焙到一个UI层更健康。在进行全面潜水之前,有几个要点值得考虑:

    • 您将业务逻辑与业务实体本身紧密耦合。是否存在需要字段或有效值可能更改的情况?您可能会限制自己或面临不一致的验证机制
    • 动态分配是可能的,但更复杂-即当您将字段设置为必需时,除非您重写,否则它将是必需的
    • 如果您想做一些更复杂的事情(即需要将状态传递到属性驱动的验证方案中),那么定制属性可能非常不灵活。声明性赋值等属性。但是,这里不应该只存在一个正确/错误的必需属性。

    只是作为一个魔鬼拥护者,实际上,一般来说,对于一个只关心必需字段的简单应用程序,这是一种非常整洁的方法。

    推荐文章