在 BLL、DAL 或 PL 中,我应该在哪里处理异常?

tee*_*nup 3 .net c# architecture layered

哪个是处理异常的最佳位置?BLL、DAL 或 PL ?

我应该允许 DAL 和 BLL 中的方法在链上抛出异常并让 PL 处理它们吗?还是我应该在 BLL 处理它们?

例如

如果我的 DAL 中有一个方法发出“ExecuteNonQuery”并更新一些记录,并且由于一个或多个原因,0 行会受到影响。现在,我应该如何让我的 PL 知道是否发生了异常或确实没有与条件匹配的行。我应该在我的 PL 代码中使用“try catch”并通过异常让它知道,还是应该在 DAL 处理异常并返回一些像 (-1) 这样的特殊代码让 PL 区分(异常)和(否)行匹配条件,即受影响的零行)?

Mar*_*ulz 5

让 DAL 中抛出的异常冒泡到 PL 是没有意义的 - 如果无法建立数据库连接,用户应该如何反应?

如果您可以处理异常,尽早捕获并处理异常。不要在不输出提示或日志消息的情况下吞下它们 - 这将导致难以跟踪的严重困难和错误。