8

是否值得为仅在类中调用一次的代码提取私有方法,或者将代码留在父方法中(可能)并带有注释说明它的作用?

4

6 回答 6

13

如果它阐明了代码的意图,那么提取方法总是值得的。

对于非常长的方法尤其如此。虽然评论很好,但它们并没有描述(至少不是以非常可靠的方式)它解释的过程在哪里结束以及下一个过程从哪里开始。有时,在您提取方法之后,常见的抽象只会变得更加明显。

如果您从事自动化单元测试(不一定是 TDD),那么对较小的方法块进行单元测试也会容易得多——尽管您可能必须为此公开您的方法,具体取决于您使用的测试框架.

关键是,较小的方法不会出错,尤其是当它们具有描述性名称时。

于 2009-04-22T11:07:14.870 回答
2

这样做有很大的好处。这完全是关于隐藏信息,并使意图非常明确。

在 Refactoring to Code 中,他们称之为组合方法,您可以将一个大方法分解为许多较小的方法。这有两件事。

首先,它减少了在处理父方法时需要担心的信息量。

其次,方法的名称应表明其意图,使代码更具可读性。

于 2009-04-22T11:08:56.957 回答
2

是的。

  • 如上所述:它通常会阐明代码的意图。
  • 即使现在只用一次,以后也可以更方便地重用代码。

补充一点:对于简单的辅助方法,您可能希望将它们设为静态(这样它们不依赖或更改其实例的状态),然后您可以将它们公开以便更容易重用。

于 2009-04-22T11:09:45.770 回答
1

对我来说,这取决于代码有多大,以及它与父方法的作用有多相关。如果代码很多(比如超过 5-10 行代码,或者超过父方法中代码总量的 50%),我会将其提取到私有方法中,以提高代码结构和可读性。否则,我会将其保留在带有描述性注释的父方法中。

我认为如果代码中有太多非常小的方法,可维护性和可读性会降低。我争取一个良好的平衡。但每当我怀疑时;我将其提取为私有方法。

于 2009-04-22T11:11:00.930 回答
0

您应该根据您在其他地方使用时要公开的 API 和方法/属性的设计,将其重构为私有。您不应该考虑使用它来决定是否将其设为私有/公开。

于 2009-04-22T12:13:31.077 回答
-1

只是一个愚蠢的估计,但我想说大多数私有方法只在普通班级的几个地方被调用。但是,如上所述,如果您将所有功能分解为逻辑块,它会使您的代码更具可读性并且更易于测试/维护。重构是个好习惯

于 2009-04-22T11:21:47.237 回答