多层WinForm应用程序中的错误处理

时间:2009-12-21 14:43:26

标签: c# winforms error-handling error-logging

如果我有一个带有演示文稿,业务和数据层的多层Winform应用程序,我在业务层或数据层遇到错误,唯一的逻辑操作是记录错误并通知用户发生错误应该在何处进行记录?

我应该将这些方法放在try catch块中的Business和Data Layers中吗?

try
{
    DoSomethingThatMightGiveErrors();
}
catch(Exception ex)
{
    logger.log(ex.ToString());
    throw;
}

或者我应该让错误冒泡到表示层并处理日志记录并通知用户那里?

4 个答案:

答案 0 :(得分:3)

我将日志记录放在业务层级别,然后重新抛出错误。如果将来在另一个项目中使用此层,它已经在进行日志记录。重新抛出异常允许此层的使用者将错误转换为友好消息。

编辑:我认为这取决于日志记录的类型:如果您要登录到独立于UI的中央数据库,请将日志记录放在业务逻辑层中。如果日志记录特定于UI,例如将日志文件写入应用程序的目录,则将其放在UI中。

答案 1 :(得分:2)

如果您正在谈论未处理(非业务相关)异常,请让它们传播到您可以捕获/记录/通知用户的UI层。

答案 2 :(得分:1)

我的偏好是将其置于业务层。

  1. 如果你改变了性质 表示层(即 winforms to webforms)日志记录 代码不需要重复。
  2. 您可以更轻松地查找和维护所有日志记录,因为您始终可以扫描业务类的方法列表并检查/调整它们以进行日志记录。如果将日志记录放在表示层中,则日志记录调用将分散在整个地方 - 单个业务类可以在许多不同的表示类中进行日志记录调用。

答案 3 :(得分:0)

这取决于您的要求,例如,您是否希望通过冒泡到表示层来显示错误,从而使您的用户不在您的应用程序中?这些错误在意外情况下出现的频率是多少?

这是一个加载的问题,每个应用程序都不同,我可以说的最基本的事情是在业务/数据层中使用try catch子句,并确保在某些可能出现错误的情况下通知用户(你在文档中有这个吗?)

除此之外,请检查最终用户的要求和反馈......如果您允许错误出现在表示层上,最糟糕的情况是用户将因为错误喷出而拒绝使用它...

希望这可以帮到你, 最好的祝福, 汤姆。