我有一个 WCF 服务,其中包含许多(~30)这样的方法:
public Foo GetFooById(string id)
{
try
{
return FooLogic.GetById(id);
}
catch (Exception ex)
{
throw LogAndThrowFaultException(ex);
}
}
除了 try 块中的一行之外,这些方法中的代码完全相同。这很简单,我什至已经抽象了日志记录并抛出异常。
本着 DRY 的精神,我可以走得更远,这样做:
public Foo GetFooById(string id)
{
return PerformServiceOperation<Foo>(() => FooLogic.GetById(id));
}
为此,此方法将处理重复的 try/catch 代码并调用每个函数:
private T PerformServiceOperation<T>(Func<T> func)
{
try
{
return func.Invoke();
}
catch (Exception ex)
{
throw LogAndThrowFaultException(ex);
}
}
这是不是太过分了?代码是否已经如此简单,是否应该不理会它?还是将 func 传递给辅助方法并让该方法处理重复的 try/catch 是个好主意?我也关心可读性。我认为对辅助方法的调用有点难看。