Java-重构几乎相同的方法
我有一个类似这样的方法:Java-重构几乎相同的方法,java,design-patterns,refactoring,Java,Design Patterns,Refactoring,我有一个类似这样的方法: private void method(final Param one, final Param two) { Code Block CallToAnotherMethod() } 此方法从两个位置调用。在其中一个地方,我想按原样调用整个方法。其次,我只想执行代码块,而不想执行调用其他方法() 我应该如何重构这个?用99%的相同代码实现两个方法看起来并不优雅 提前感谢您的建议。给您 private void method(final Param on
private void method(final Param one, final Param two) {
Code Block
CallToAnotherMethod()
}
此方法从两个位置调用。在其中一个地方,我想按原样调用整个方法。其次,我只想执行代码块
,而不想执行调用其他方法()
我应该如何重构这个?用99%的相同代码实现两个方法看起来并不优雅
提前感谢您的建议。给您
private void method(final Param one, final Param two) {
codeBlockMethod()
CallToAnotherMethod()
}
private void method2(final Param one, final Param two) {
CallToAnotherMethod()
}
private void codeBlockMethod() {
Code Block
}
给你
private void method(final Param one, final Param two) {
codeBlockMethod()
CallToAnotherMethod()
}
private void method2(final Param one, final Param two) {
CallToAnotherMethod()
}
private void codeBlockMethod() {
Code Block
}
如果对实际代码没有任何洞察,就很难正确判断它。与任何一般性问题一样,我们只能提供一般性答案
private void method(final Param one, final Param two) {
methodForCodeBlock(one, two);
callToAnotherMethod()
}
private void methodForCodeBlock(final Param one, final Param two) {
// code block here
}
private void callToAnotherMethod() {
...
}
要仅执行代码块,请调用methodForCodeBlock(…)
。要执行所有操作,请调用方法(…)
而不深入了解实际代码,很难正确判断它。与任何一般性问题一样,我们只能提供一般性答案
private void method(final Param one, final Param two) {
methodForCodeBlock(one, two);
callToAnotherMethod()
}
private void methodForCodeBlock(final Param one, final Param two) {
// code block here
}
private void callToAnotherMethod() {
...
}
要仅执行代码块,请调用methodForCodeBlock(…)
。要执行所有操作,请调用方法(…)
添加第三个参数,例如布尔doAdditionalProcessing
,并使用该参数确定调用其他方法()
应该执行。您可以传递另一个参数来决定要执行的代码。请将99%的代码放在它自己的方法中。不要添加确定要执行的代码的参数。这是糟糕的设计,打破了简单责任原则。@GriffeyDog“在方法的条件中使用参数”和“使用参数确定方法的逻辑”之间有区别。boolean
参数是一个指示符号,无论它被称为performSpecialHandling
、doAdditionalProcessing
还是fixDesignProblemWithMoreBadDesign
。添加第三个参数,例如boolean doAdditionalProcessing
,并使用该参数确定是否调用其他方法()
应该执行。您可以传递另一个参数来决定要执行的代码。请将99%的代码放在它自己的方法中。不要添加确定要执行的代码的参数。这是糟糕的设计,打破了简单责任原则。@GriffeyDog“在方法的条件中使用参数”和“使用参数确定方法的逻辑”之间有区别。boolean
参数是一个指示符号,无论它被称为performSpecialHandling
、doAdditionalProcessing
还是fixDesignProblemWithMoreBadDesign
。方法名称不一致。方法名称不一致。