在属性中实现逻辑是一种好的做法

Jaw*_*ikh 26 c# asp.net

我们使用ASP.NET和C#并基于我通过的开源项目/文章,我发现很多属性都包含一个逻辑,但当我这样做时,团队负责人告诉我,将逻辑放在属性中并不是很好通过方法调用逻辑......

真的很糟糕吗?为什么不在属性中使用逻辑?

谢谢,

Ins*_*ter 37

预计属性访问是即时的(没有长时间等待),一致的(没有变化的值)和安全的(没有例外).如果你可以做出这些保证,我认为在属性中放置逻辑是可以的.

  • 如果有人试图设置非法值,那么例子就可以了. (13认同)
  • 一致你的意思是[幂等吗?](http://en.wikipedia.org/wiki/Idempotence) (2认同)

Jon*_*eet 30

在属性中有一些逻辑很好.例如,setter中的参数验证和getter中的延迟计算都很常见.

这是通常的属性访问做一些昂贵的东西,如数据库调用一个坏主意,但是.开发人员倾向于认为评估属性相当便宜.

这最终是一个判断调用 - 但我当然拒绝这样的建议,即属性应该只能在自动属性实现的范围内变得微不足道.


tva*_*son 9

属性方法.它们只是吸气者/制定者的捷径.任何在getter/setter中有效的逻辑都适合放入属性.通常不会放入getter/setter的任何逻辑都不适合放入属性.一般来说,如果您(作为该类的消费者)不能过分地期望设置属性值,或者更糟糕的是,获取属性值可能会导致行为发生,那么该逻辑可能属于其他地方.换句话说,逻辑应该与获取或设置属性相关并且一致.

引用上面的链接文章:

属性是提供灵活机制来读取,写入或计算私有字段值的成员.可以使用属性,就像它们是公共数据成员一样,但它们实际上是称为访问器的特殊方法.这使得数据易于访问,同时仍然提供方法的安全性和灵活性.