0

一些帖子涵盖了基于捕获的异常提供用户友好消息的问题,例如报告异常消息

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

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

现在我第一次开发移动应用程序。如果由于连接或网络问题(可能是坏的或没有服务或处于飞行模式等)而无法执行某项操作,我发现它对用户很有用且 Importamt 向他们显示适当的消息

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

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

还是我走错了路,可以告诉用户“无法执行操作 x”,而不给出任何理由?

更新:

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

DDD分层架构

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

4

1 回答 1

0

由于您列出的原因等等,您的域不应该抛出任何异常。例外是不可避免的,因此应该在您的域范围内优雅地处理它,但不应该逃脱。

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

于 2018-03-06T00:57:56.143 回答