Bil*_*lla 10 c# asp.net-mvc exception-handling asp.net-mvc-3
我在我的应用程序中遵循这种处理异常的方式.但我的领导说我做错了.我只是包装和重新抛出相同的异常,这将影响性能.
我的做法有什么问题?有没有人对我如何在这里记录和处理异常有任何建议?
public class BusinessRepository : IBusinessRepo
{
public List<Employee> GetEmployees()
{
try
{
//do some DB operations
}
catch (SQLException sqlex)
{
Logger.Log("Exception detail with full stack trace");
throw new DALException(sqlex, "Error in data access layer");
}
}
}
public class BusinessLayerClass : IBusinessLayer
{
private readonly IBusinessRepo Repo;
public BusinessLayerClass(IBusinessRepo rep)
{
Repo = rep;
}
public List<Employee> GetEmployees()
{
try
{
List<Employee> emps= return Repo.GetEmployees();
}
catch (DALException dex)
{
//do nothin as it got already logged
throw;
}
catch (Exception ex)
{
Logger.Log(ex, "Business layer ex");
throw new BusinessLayerEx(ex);
}
}
}
public class HomeController : Controller
{
public ActionResult Index()
{
try
{
List < Employee >= BusinessLayerClass.GetEmployees();
}
catch (DALException)
{
//show error msg to user
}
catch (BusinessLayerEx)
{
//show error msg to user
}
catch (Exception ex)
{
Logger.Log();
//show error msg to user
}
return View(emps);
}
}
Run Code Online (Sandbox Code Playgroud)
我是否遵循上面显示的正确的冒泡和处理方式?
我倾向于同意你的做法,只要满足两个条件:
Logger.Log语句记录的内容比您在此处指示的内容更有意义/有用(我猜您的代码此处只是指示记录错误的示例消息)。如果它提供了可用于追踪异常原因的信息,那就太好了。//show error msg to user评论意味着在该位置,您将呈现一个很好的视图,解释发生了错误,并且您不只是显示默认的异常屏幕/跟踪跟踪。至于throw;当你捕获刚刚抛出的 DALException 时:那很好。您这里的目标似乎是捕获来自前一层的任何异常并记录它,然后抛出您自己的异常。由于只有在您已经记录了另一个错误并自己抛出它时才会抛出 DALException,因此让它冒泡超过此级别是完全可以的。
| 归档时间: |
|
| 查看次数: |
1266 次 |
| 最近记录: |