我有一个Long Method有很多Duplicated Code。为了修复这个Code Smell,我想使用Extract Method。但是,提取的方法仅在上述 Long 方法的范围内有用,因此在我的类中的其他地方可以访问它们在我看来就像另一个 - 虽然较小 - Code Smell。
如何解决这个问题?是否有可能——也许通过使用一个聪明的设计模式——让一个私有方法只能在同一个类的另一个私有方法中访问?
我有一个Long Method有很多Duplicated Code。为了修复这个Code Smell,我想使用Extract Method。但是,提取的方法仅在上述 Long 方法的范围内有用,因此在我的类中的其他地方可以访问它们在我看来就像另一个 - 虽然较小 - Code Smell。
如何解决这个问题?是否有可能——也许通过使用一个聪明的设计模式——让一个私有方法只能在同一个类的另一个私有方法中访问?
为什么不将您的长方法拉出到一个单独的方法对象中并放入您的私有提取方法,以便它仅适用于该方法对象?
public class LongCalculator {
public void longMethod() {
innerMethod();
}
private void innerMethod() {
// ...
}
}
您可以在long 方法中使用特定于方法的函数声明一个对象,但这开始看起来很讨厌(您可能需要特定的接口或类定义)
另外请注意,Scala(我之所以提到 Scala 只是因为我熟悉它,而且它是一种 JVM 语言)允许在专门针对此问题的函数中使用函数。不是你的解决方案,但值得注意的是其他语言有模式/工具正是你的问题。