1

例如,如果我有一个带有演示层、业务层和数据层的多层 Winform 应用程序,并且我在业务层或数据层中遇到错误,唯一的逻辑操作是记录错误并通知用户发生错误应该在哪里进行日志记录?

我应该像这样将业务和数据层中的方法放在 try catch 块中吗

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

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

4

4 回答 4

3

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

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

于 2009-12-21T14:51:22.510 回答
2

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

于 2009-12-21T14:50:27.623 回答
1

我的偏好是将它放在业务层中。

  1. 如果您改变了表示层的性质(即从winforms 到webforms),则不需要复制日志代码。
  2. All of your logging will be a lot easier to find and maintain, as you can always scan the business class's list of methods and inspect/tweak them for logging. If you put the logging in your presentation layer, the logging calls will be scattered all over the place - a single business class could have logging calls made in many different presentation classes.
于 2009-12-21T14:53:29.837 回答
0

这取决于您的要求,例如,您是否希望由于通过冒泡到表示层而出现错误而让您的用户离开您的应用程序?这些错误在意外情况下多久会发生一次?

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

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

希望这对你有帮助,最好的问候,汤姆。

于 2009-12-21T14:49:50.813 回答