对于代码行方面的“获取”的大小,是否有任何指导方针或一般共识?我在一个成员上有一个Get方法,这里很容易增长到30行代码。我不确定在什么时候这应该被引入一个方法。但是后来我只会调用类似GetMyString的东西,并将值分配给另一个成员并在构造函数中调用它。
是否值得这样做?
这对SO来说太主观了吗?
答案 0 :(得分:15)
dcastro的答案很好但可以使用一些扩展:
这不是量化的;让我们量化一下。一个属性不应该超过获取字段所需时间的十倍。
这些都很慢,因此通常属于第一条规则,但第二个方面是:失败应该是罕见的或不可能的。属性getter不应该抛出异常。
我会澄清可观察的副作用。属性获取者通常会产生副作用,即他们计算属性一次并将其缓存以供日后使用,但这不是可观察到的副作用。
对于使属性具有可观察的副作用而言,不仅在哲学上是不好的,它还会破坏您的调试体验。请记住,默认情况下,当您在调试器中查看对象时,调试器会自动调用其属性getter并显示结果。如果这样做很慢,那么会减慢调试速度。如果这样做可能会失败,那么您的调试体验将充满失败消息。如果这样做有副作用,那么调试程序会改变程序的工作方式,这可能会使查找错误变得非常困难。您当然可以关闭自动属性评估,但最好先设计好的属性。
答案 1 :(得分:12)
重要的不是大小(没有双关语意)。 只要
,就可以将你的逻辑放在吸气剂中这些只是适当使用财产的一些指导原则。
修改强>
上述指南共享一个理想:属性访问器应该像数据访问一样,因为这是用户期望的。
Bill Wagner撰写的有效C#一书:
属性是可以从调用代码中查看的方法 数据。这给用户带来了一些期望。他们会的 看到属性访问,就好像它是一个数据访问。毕竟, 这就是它的样子。您的财产访问者应该不辜负 那些期望。获取访问者不应该有可观察的一面 效果。设置访问器会修改状态,用户应该能够 看到那些变化。
属性访问器也具有性能 对用户的期望。属性访问看起来像数据字段 访问。它不应该具有性能特征 与简单的数据访问明显不同。
属性访问者 不应该执行冗长的计算,或进行交叉应用 调用(例如执行数据库查询),或做其他冗长的事情 与用户期望不一致的操作 对于属性访问者。
Alberto的奖金:http://msdn.microsoft.com/en-us/library/vstudio/ms229054%28v=vs.100%29.aspx
答案 2 :(得分:3)
这不一定是坏事,但如果是我,那会让我感到紧张,我会试着以某种方式试图分解它。吸气剂是一种方法,所以简单地将整个物体拉成30+线方法在我看来是浪费时间。我会试图把它砍掉。例如。如果它是带有一些检查的循环,则将检查作为方法或某些方法提取。
答案 3 :(得分:2)
将一大堆行推入Get方法是一种常见的不良做法。 我在visual studio中安装了一些名为CodeMaid的东西。它有一个名为CodeMaid Spade的东西,它为每种方法评分并给你一个分数。分数越高,方法越差。它也可以用在属性上。我建议你尝试一下,它有助于格式化,缩进和一堆其他好的做法
答案 4 :(得分:1)
作为一般准则,方法不应该在一个屏幕上有更多的线条。如果你必须滚动,它太大了。将其分成更小的方法。