【发布时间】:2014-03-13 11:19:09
【问题描述】:
我有这样的课:
class SampleRepositoryClass
{
void MethodA()
{
try
{
//do something
}
catch(Exception ex)
{
LogError(ex);
throw ex;
}
}
void MethodB(int a, int b)
{
try
{
//do something
}
catch(Exception ex)
{
LogError(ex);
throw ex;
}
}
List<int> MethodC(int userId)
{
try
{
//do something
}
catch(Exception ex)
{
LogError(ex);
throw ex;
}
}
}
在上面的示例中,您可以看到在每个方法(MethodA、MethodB、MethodC)中都有 try...catch 块来记录错误,然后抛出到更高级别。
想象一下,当我的 Repository 类可能有一百多个方法并且在每个方法中我都有 try...catch 块时,即使只有一行代码。
现在,我的目的是减少这些重复的异常记录代码,并在类级别而不是方法级别记录所有异常。
【问题讨论】:
-
只有 aspect-oriented programming tools/weavers like PostSharp 可以帮助你。对了,一个类有一百多个方法?那只是……糟糕。至少从我的角度来看。而且绝对可怕。
-
确实如此,但我的业务和存储库类有很多方法,这使得这些类过于繁重。实际上,一个类中方法的数量取决于业务规则的复杂程度或您要执行的操作的数量。
-
不要使用“throw ex;”因为那会破坏你宝贵的调用堆栈。只需写“投掷”;并且异常中的信息将被保留。话虽如此,我想指出,除非您知道如何处理异常,否则不应捕获异常。参考:stackoverflow.com/questions/730250/…
-
@Patrik- 我知道我应该只写“投掷”。您的建议是执行错误处理的最佳实践。但我的情况不同,我想在单个类级别处理所有类方法异常。对于 A 类中的所有方法,必须只有一个地方来处理和记录 A 类的任何方法中发生的错误。
标签: c# exception exception-handling