我有一个 MVC EF5 设置,带有类:
Program
- 这是控制器UserInterface
- 这是视图,负责显示和提示数据。DataAccess
- 模型,这在我的 EF 模型类中创建、读取、更新和删除数据
当 DataAccess 类尝试对我的数据库执行 CRUD 操作时,如果它捕获到错误,则需要对其进行处理,我的 UserInterface 类需要向用户打印消息,并在必要时报告任何错误。所以,当发生错误时,需要先经过程序类,然后到UserInterface类,因为数据层不应该直接与表示层通信。
有人建议我不要将异常传递或返回给调用函数,而是应该“向上面的层抛出一个新的更简单的异常”。所有这些关于异常的讨论都让我感到困惑,因为我对异常的体验仅限于这种格式:
try
{
// stuff
}
catch (exception ex)
{
console.writeline(ex.ToString());
}
我已经做了一些自己的研究,试图找到这个问题的答案,我学到了一些东西,但不知道如何把它们放在一起:
我学会了:
throw;
重新抛出异常并保留堆栈跟踪throw ex
抛出现有异常,例如在 catch 块中捕获的异常。并重置堆栈跟踪。- 有一个名为 Exception.StackTrace 的属性。我知道每次抛出异常时,调用堆栈中的帧都会记录到 Exception.StackTrace 属性中。
但是,我不知道在哪里放置我的 try/catch 块以利用重新抛出
是不是类似于下面的代码?还是我错过了它如何工作的重点?
已编辑:(添加了更多内容以使其他人了解这种猜测)
void MethodA()
{
try
{
MethodB();
}
catch (MyExceptionType ex)
{
// Do stuff appropriate for MyExceptionType
throw;
}
}
void MethodB()
{
try
{
MethodC();
}
catch (AnotherExceptionType ex)
{
// Do stuff appropriate for AnotherExceptionType
throw;
}
}
void MethodC()
{
try
{
// Do Stuff
}
catch (YetAnotherExceptionType ex)
{
// Do stuff appropriate for YetAnotherExceptionType
throw;
}
}