如何解决如何重构仅在内部函数调用中不同的重复代码?
我有一个实用程序类(U),我从另一个类中调用它。 让我们在U中拥有这些功能:
Func1(params):
/*some code*/
funcA(param1,param2)
/*some_code*/
Func2(same params as in Func1):
/*same code as in 1*/
funcB(param1,param2) //same types of params as in funcA
/*same code as in 1*/
如何避免在此处重复代码?我考虑过传递funcA或B的委托,但是问题是它们是在实用程序类内部实现的,而我是从外部调用func1 / 2的,因此调用者不知道funcA或funcB。 有任何想法吗?我的程序在c#中(此代码是抽象的) 谢谢
解决方法
您可以提取公共部分并分别从Func1
和Func2
中传递委托。
private delegate string PerformOperation(Type1 param1,Type2 param2);
private void CommonFunc(Type1 param1,Type2 param2,PerformOperation operation)
{
PreSteps();
operation(param1,param2);
PostSteps();
}
您的所有方法所做的就是调用带有参数和委托的CommonFunc
public void Func1(Type1 param1,Type2 param2)
{
CommonFunc(param1,param2,funcA);
}
public void Func2(Type1 param1,funcB);
}
由于CommonFunc
是private
,因此您的图书馆的客户不需要知道PerformOperation
,也不需要知道funcA
或funcB
。
我会说要传递一个Action或 Delegate 作为参数,但是正如您提到的那样,调用者不知道funcA或FuncB是不合适的。 作为一个简单的建议,我将尝试封装两个重复的代码块。因此,您最终会遇到类似这样的情况:
Func1(params)
{
EncapsulatedBlockOfCode1();
funcA(param1,param2);
EncapsulatedBlockOfCode2();
}
Func2(same params as in Func1)
{
EncapsulatedBlockOfCode1();
funcB(param1,param2) //same types of params as in funcA
EncapsulatedBlockOfCode2();
}
至少这可以帮助您减少重复的代码,并更清楚地了解如何重构代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。