方法在同一个类中调用其他方法

时间:2010-05-28 13:21:30

标签: anti-patterns

在类设计中,如果一个方法在同一个类中调用另一个方法,这是一个坏习惯(例如,3个方法在同一个类中调用1个方法)。

由于

6 个答案:

答案 0 :(得分:3)

完全没有,如果您正确设计了课程,那就是预期的。你应该有一个小的公共接口,如果实现很复杂,你可能最终会在同一个类中调用许多私有方法。

事实上,这样做可能是一种反模式。如果你经常调用另一个类的方法,那就叫做Feature Envy,你应该把它们组合起来。如果你把所有的实现都放在一个巨大的功能中,那就是不可维护的,并且可能包含很多代码重复。

将事情分解为其他可重用的方法是一件好事。您调用相同方法的3种方法的情况是完美的代码重用。如果在每个调用函数中复制了那个函数的代码,那将是非常糟糕的。

答案 1 :(得分:1)

方法只是函数和函数,是代码重用和设计改进的抽象。如果一个类的三个方法在运行时需要做同样的事情,他们应该为此复制粘贴代码还是调用一个单独的方法?

将一些有意义的代码部分分成一个被其他方法调用的方法,这只是代码重用的另一个例子,除非你真的过度使用它。

答案 2 :(得分:1)

没有。您似乎找到了有效的用途来维护DRY principles

答案 3 :(得分:1)

没有。事实上,这是一个很好的做法。或者您认为执行调用的三种方法应该每次都复制被调用的代码吗?

答案 4 :(得分:0)

完全没有。事实恰恰相反。方法是完成特定的任务,你应该使用它们。

答案 5 :(得分:0)

是的,如果这些方法可以覆盖,即类和/或方法不是最终的。原因是尝试覆盖行为或提供服务层的子类无法可靠地执行此操作,因为可以多次输入该层。 示例(Scala伪代码),我们假设HashSet.addAll调用自己的HashSet.add

class MemCountingSet[T] extends HashSet[T] {
  private def sizeOf(t: T) = ...

  private var memCount = 0

  def add(t: T) = {
    memCount += sizeOf(t)
    super.add(t)
  }
  def addAll(coll: Collection[T]) = {
    memCount += coll.foreach(sizeOf)
    super.addAll(coll)
  }
}

使用addAll时,我们现在最终重复计算。