下面是我所拥有的设置的简化示例。我的问题是在低级别引发异常,然后会冒泡。但是,较高级别的类不知道当他们使用较低级别的类函数时会发生什么恐怖事件。我的意思是,开发人员会出现并使用 Class3.DoWork3(),而不需要对可怕的“MyCustomException”进行任何异常处理。
我接近这一切都错了吗?我不想多次捕获并抛出相同的异常(例如,我不需要在 Class2 中进行任何类型的清理)。
public class Class1
{
<exception cref="MyCustomException">description</exception>
public void DoWork1()
{
throw new MyCustomException("I have failed you class1.");
}
}
public class Class2
{
public void DoWork2()
{
var classOne = new Class1();
// Here I can see that DoWork1() will throw a 'MyCustomException'
classOne.DoWork1();
}
}
public class Class3
{
public void DoWork3()
{
var classTwo = new Class2();
// I can no longer see that Class2.DoWork2() will throw a 'MyCustomException'
classTwo.DoWork2();
}
}
为了消除评论中似乎产生的一些混淆,我将提出我目前正在考虑的两种解决方案:
- 使用与 Class1 相同的 MyCustomException 注释标记 DoWork2
- 在 DoWork2 中抛出一个不同的异常并用这个新异常标记它。这个选项似乎是最强大的,因为它允许更详细的日志(例如,代码在其执行路径中的确切位置)。对于简单化的场景,这种方式似乎有点过头了,这就是为什么我想知道(1)是否是这个问题的可接受解决方案?