在分层体系结构中提供NetworkException作为用户友好的消息

时间:2018-03-04 23:41:38

标签: exception-handling domain-driven-design user-friendly

有几个帖子涉及根据捕获的异常提供用户友好消息的问题,例如Report exception message

我还认为将较低层的异常包装到当前层的已定义异常中以确保封装。例如,服务或域层不应暴露数据访问层的异常。

在我的UI层中,我捕获了服务或域层中定义的异常,并将它们转换为对话框中有意义的用户消息。我不使用异常消息,因为它可能1)不是用户友好的,2)不能国际化。

现在我第一次开发移动应用程序。我发现如果由于连接或网络问题(可能是坏的或没有服务或在飞行模式等等)无法执行操作,用户可以向用户显示相应的消息并使用Importamt

为了显示这种消息,我必须从服务/域层中捕获它以转换为用户友好的消息并进行国际化等。但是这种接触违反直觉,在这一层中暴露这些异常。

在移动应用中的域层中暴露NetworkException是否可以?或者还有其他技术来处理这种情况吗?我觉得这有点不好,因为它引入了漏洞抽象,但我不知道如何获得对用户很重要的这些低级异常的信息。

或者我是在错误的道路上并且可以告诉用户“操作x无法执行”,而没有给出任何理由?

更新

Eric Evans在他的DDD书中展示了这个图表:

DDD Layered Architecture

从UI层到基础架构层之间存在连接。这可以解释为UI可能直接了解基础设施异常吗?

1 个答案:

答案 0 :(得分:0)

由于您列出的原因以及更多原因,您的域名不应该引发任何例外情况。例外是不可避免的,因此应该在您的域的边界内优雅地处理,但不应该离开。

对于来自依赖API的404等受控异常或用户数据验证失败,您希望返回有意义的数据,如nullobject或只是特定于域的错误对象。这也适用于网络异常等异常。您的方法应该优雅地处理异常,您的域应该返回一个符合UL的对象