Я хотел бы знать, как лучше всего избежать повторения некоторой повторяющейся структуры кода с помощью Generics Func или любым другим способом. В качестве практического примера давайте мне нужно вызвать 20 различных методов WCF, но я хотел бы иметь код для обработки исключений.
Допустим, это прокси wcf
class ClassWithMethodsToCall // say wcf proxy
{
public Out1 GetOut1(In1 inParam) { return null; } // would have some spesific implementation
public Out2 GetOut2(In2 inParam) { return null; }
public Out3 GetOut3(In3 inParam) { return null; }
}
class Out1 { } // some specific data structure
class In1 { } // some specific data structure
class Out2 { } // some specific data structure
class In2 { } // some specific data structure
class Out3 { } // some specific data structure
class In3 { } // some specific data structure
Я создал следующее, чтобы иметь одну обработку ошибок
class CallerHelperWithCommonExceptionHandler
{
public Tout Call<Tout, Tin>(Tin parameters, Func<Tin,Tout> wcfMethodToCall)
{
try
{
return wcfMethodToCall(parameters);
}
catch (Exception ex)
{
// do what ever
throw;
}
}
}
И я использую его:
var callerHelper = new CallerHelperWithCommonExceptionHandler();
var theFunctionsToCall = new ClassWithMethodsToCall();
var in1 = new In1(); // init as appropriate
var ou1 = callerHelper.Call<Out1, In1>(in1, theFunctionsToCall.GetOut1);
var in2 = new In2(); // init as appropriate
var ou2 = callerHelper.Call<Out2, In2>(in2, theFunctionsToCall.GetOut2);
// and so on
Есть ли лучший более элегантный способ? Альтернативы объектно-ориентированному подходу, шаблон проектирования шаблонов?
Спасибо, аль
ClassWithMethodsToCallмне подходит. ВашCallerHelperWithCommonExceptionHandlerусугубляет ИМО. - person Sriram Sakthivel   schedule 19.02.2015