【发布时间】:2023-03-05 14:49:01
【问题描述】:
在我们的系统设计中,我们有以下几层:
Web API -> BusinessLayer -> HelperLayer -> DataLayer - Call hierarchy
Web API 是 Rest 服务层,Business 对业务实体进行业务操作,Helper 将 Data 实体转换为 Business Entity,Data 从数据库中获取 POCO
我们在讨论系统的异常管理策略时,有以下两种观点:
我希望所有错误都传播到 Web API,我们使用错误过滤器来拦截、记录错误并更改 Context.Response 以向最终用户提供友好的消息,这样做的好处是:
错误源保持不变
我们处理需要的异常
简单直接的错误处理机制
另一组队友更喜欢的是我们为每个层创建一个自定义异常,例如 DALException、HelperException、BusinessException,其中给定层抛出异常,调用层处理它,填充内部异常并因此继续,按照他们的好处是:
- 每一层都可以提供问题/异常的自定义信息,这将有助于错误/异常抽象
对我来说,这种设计的问题是:
- 更改异常的来源,这不是一个好的做法
- 捕获异常而不进行任何处理
- 在任何地方添加 try catch 会产生大量额外代码,据我了解,这会影响性能
我看到的唯一好处是我们可以向客户提供特定消息,但这甚至是可能的,如果我们了解底层核心异常并根据一些代码进行区分,从而提供像 ABC failed 这样的自定义消息而不是通用消息.
请分享您的观点,如果需要澄清,请告诉我
【问题讨论】:
-
据我了解,这是一个非常通用的设计问题,对 c# 和 Java 都有效,即使我的代码在 c# 中也是如此
标签: java c# exception exception-handling