Ich habe eine Utility-Klasse (U), die ich aus anderen Klassen aufrufe. Lassen Sie uns Tag ich habe diese Funktionen in 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*/

Wie kann ich hier doppelten Code vermeiden? Ich habe darüber nachgedacht, einen Delegaten von funcA oder B zu übergeben, aber das Problem ist, dass sie innerhalb der Utility-Klasse implementiert sind und ich func1 / 2 von außerhalb aufrufe, sodass der Aufrufer funcA oder funcB nicht kennt. Irgendwelche Ideen? Mein Programm ist in c # (dieser Code ist eine Abstraktion) Danke

0
Nia B 19 Aug. 2020 im 11:31

2 Antworten

Beste Antwort

Sie können den gemeinsamen Teil extrahieren und den Delegaten aus Func1 bzw. Func2 übergeben.

private delegate string PerformOperation(Type1 param1, Type2 param2);

private void CommonFunc(Type1 param1, Type2 param2, PerformOperation operation)
{
    PreSteps();
    operation(param1, param2);
    PostSteps();
}

Sie rufen lediglich CommonFunc mit den Parametern und dem Delegaten auf

public void Func1(Type1 param1, Type2 param2)
{
    CommonFunc(param1, param2, funcA);
}

public void Func2(Type1 param1, Type2 param2)
{
    CommonFunc(param1, param2, funcB);
}

Da CommonFunc private ist, muss der Client Ihrer Bibliothek weder PerformOperation noch funcA oder funcB kennen.

3
Paul Kertscher 19 Aug. 2020 im 08:41

Ich hätte gesagt, eine Aktion zu bestehen oder Delegieren als Parameter, aber wie Sie erwähnt haben, dass der Anrufer nichts über funcA oder FuncB weiß, ist dies nicht geeignet. Als einfachen Vorschlag würde ich versuchen, die 2 duplizierten Codeblöcke zu kapseln . Am Ende hätten Sie also so etwas:

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();
}

Zumindest kann dies Ihnen helfen, den duplizierten Code zu reduzieren und klarer zu sehen, wie Sie Ihren Code umgestalten können.

0
Sebastian Inones 19 Aug. 2020 im 08:44