Get方法的大小

在代码行方面是否有关于“获取”大小的指导方针或一般共识? 我在一个成员上有一个Get方法,这里很容易增长到30行代码。 我不确定在什么时候这应该被引入一个方法。 但是我只会调用类似GetMyString的东西,并将值分配给另一个成员并在构造函数中调用它。

有没有值得这样做?

这对SO来说太主观了吗?

dcastro的答案很好但可以使用一些扩展:

  • 回来不需要很长时间

这没有量化; 让我们量化一下。 一个属性不应该比获取字段所需的时间长十倍。

  • 它不连接到外部资源(数据库,服务等)

这些都很慢,因此通常属于第一条规则,但还有第二个方面:失败应该是罕见的或不可能的。 属性getter不应该抛出exception。

  • 它没有任何副作用

我会澄清这是可观察到的副作用。 属性获取者通常具有副作用,即他们计算属性一次并将其缓存以供稍后使用,但这不是可观察到的副作用。

对于使属性具有可观察的副作用而言,不仅在哲学上是不好的,它还会破坏您的调试体验。 请记住,默认情况下,当您在调试器中查看对象时,调试器会自动调用其属性getter并显示结果。 如果这样做很慢,那么会减慢调试速度。 如果这样做可能会失败,那么您的调试体验将充满失败消息。 如果这样做有副作用,那么调试程序会改变程序的工作方式,这可能会使查找错误变得非常困难。 您当然可以关闭自动属性评估,但最好先设计好的属性。

它的重要性并不重要(没有双关语意)。 只要你的逻辑在吸气器中就可以了

  • 回来不需要很长时间
  • 它不连接到外部资源(数据库,服务等)
  • 它没有任何副作用

这些只是适当使用财产的一些准则。

编辑

上述指南共享一个理想:属性访问器应该像数据访问一样,因为这是用户期望的。

来自Bill Wagner的Effective C#一书:

属性是可以从调用代码(如数据)查看的方法。 这给用户带来了一些期望。 他们将看到属性访问,就像它是数据访问一样。 毕竟,这就是它的样子。 您的财产访问者应该达到这些期望。 获取访问者不应该有可观察到的副作用。 设置访问者会修改状态,用户应该能够看到这些更改。

属性访问者对用户也有性能期望。 属性访问看起来像数据字段访问。 它不应具有与简单数据访问明显不同的性能特征。

属性访问器不应执行冗长的计算,或进行跨应用程序调用(例如执行数据库查询),或执行与用户对属性访问器的期望不一致的其他冗长操作。

Alberto的奖金: http : //msdn.microsoft.com/en-us/library/vstudio/ms229054%28v=vs.100%29.aspx

这不一定是坏事,但如果它是我,它会让我紧张,我会试图以某种方式尝试分解它。 吸气剂是一种方法,所以简单地将整个物体拉成30+线方法在我看来是浪费时间。 我会试图把它砍掉。 例如,如果它是带有一些检查的循环,则将检查作为方法或某些方法提取。

将一大堆行推入Get方法是一种常见的不良做法。 我在visual studio中安装了一些名为CodeMaid的东西。 它有一个名为CodeMaid Spade的东西,它对每种方法进行评级并给你一个分数。 分数越高,您的方法越差。 它也可以用在属性上。 我建议你尝试一下,它有助于格式化,缩进和一些其他好的做法

作为一般准则,方法不应该在一个屏幕上有更多的线条。 如果你必须滚动,它太大了。 将其拆分为更小的方法。