【发布时间】:2010-10-21 01:43:24
【问题描述】:
是否值得为仅在类中调用一次的代码提取私有方法,或者将代码留在父方法中(可能)并带有说明其作用的注释?
【问题讨论】:
标签: oop coding-style scope private
是否值得为仅在类中调用一次的代码提取私有方法,或者将代码留在父方法中(可能)并带有说明其作用的注释?
【问题讨论】:
标签: oop coding-style scope private
您应该根据您在其他地方使用时想要公开的 API 和方法/属性的设计将其重构为私有。您不应该考虑使用它来决定是否将其设为私有/公开。
【讨论】:
只是一个愚蠢的估计,但我想说大多数私有方法只在普通类中的几个地方被调用。但是,如上所述,如果您将所有功能分解为逻辑块,它会使您的代码更具可读性并且更易于测试/维护。重构是个好习惯
【讨论】:
如果能阐明代码的意图,提取方法总是值得的。
对于非常长的方法尤其如此。虽然 cmets 很好,但它们并没有描述(至少不是以非常可靠的方式)它解释的过程在哪里结束以及下一个过程从哪里开始。有时常见的抽象只会在您提取方法后变得更加明显。
如果您从事自动化单元测试(不一定是 TDD),那么对较小的方法块进行单元测试也会容易得多 - 尽管您可能必须为此公开您的方法,具体取决于测试你使用的框架。
关键是,使用较小的方法不会出错,尤其是当它们具有描述性名称时。
【讨论】:
对我来说,这取决于代码有多大,以及它与父方法的作用有多相关。如果代码很多(比如超过 5-10 行代码,或者超过父方法中代码总量的 50%),我会将其提取到私有方法中,以提高代码结构和可读性。否则,我会将其留在父方法中并带有描述性注释。
我认为如果代码中有太多非常小的方法,可维护性和可读性会降低。我争取一个良好的平衡。但每当我怀疑时;我将其提取为私有方法。
【讨论】:
是的。
另外一点:对于简单的辅助方法,您可能希望将它们设为静态(这样它们就不会依赖或更改其实例的状态),然后您可以将它们公开以便更容易重用。
【讨论】:
这样做有很大的好处。这完全是关于信息隐藏,并使意图非常明确。
在重构代码中,他们称之为组合方法,您可以将一个大方法分解为许多较小的方法。这有两个作用。
首先,它减少了您在处理父方法时需要担心的信息量。
其次,方法的名称应表明其意图,使代码更具可读性。
【讨论】: