我遇到了有关应用程序代码结构(可维护性)的一些问题。
我重构了代码,因此通用子程序可以处理常见任务以优化可重用性。 在这些子例程中,有时必须执行附加/其他操作,具体取决于被调用者传递给例程的参数。
然而,我一直认为软件设计的基本概念是不应该知道例程。被叫者;例程不应该知道它被称为哪个例程。我很清楚,我需要在我的应用程序中更高程度地实现这一点。
如何整合这两个看似相反的概念,以便我的代码变得更透明?
考虑下一个例子:
public void processA(){
//specific code
genericStuff(true);
//specific code
}
public void processB(){
//specific code
genericStuff(false);
//specific code
}
public void genericStuff (boolean doExtra){
initializeStuff();
doStuff();
if(doExtra){
doExtraStuff();
}
doEvenMoreStuff();
finalizeStuff();
}
如果我要分解通用例程的功能,那将是结果:
public void processA(){
//specific code
initializeStuff();
doStuff();
doExtraStuff();
doEvenMoreStuff();
finalizeStuff();
//specific code
}
public void processB(){
//specific code
initializeStuff();
doStuff();
doEvenMoreStuff();
finalizeStuff();
//specific code
}
你最终会重复代码。当然,重构的目的不是集中于集中功能,从而最大限度地减少代码库?如果不再需要例程doEvenMoreStuff()
怎么办?我必须检查那种情况下的所有调用例程。