首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在出现异常时如何使用接口从技术实现中分离接口

在出现异常时如何使用接口从技术实现中分离接口
EN

Stack Overflow用户
提问于 2018-04-12 22:38:35
回答 1查看 59关注 0票数 0
  1. 我尝试使用Java接口来分离技术实现和域逻辑接口。
  2. 由于我也做了测试驱动的开发,我的实现必须抛出异常,这些异常与技术问题有关。

由于2.,我还必须向接口方法声明中添加“抛出”,这与需求1.冲突。

所以我的问题是,我不想在接口中有具体的实现细节,但是我想做测试驱动的开发。

我解决这个问题的第一个想法是将技术异常转换为域逻辑异常。

这是唯一的出路还是我错过了什么?是否有一个经过批准的设计模式来解决这个问题,或者解决这个问题的任何其他解决方案,因为引入许多自定义异常将导致开发中的开销。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-12 23:12:19

解决这个问题的典型方法是捕捉实现细节异常类型,并抛出一个更适合您特定服务的新异常类型。如果这就是您所说的“将技术异常转换为域逻辑异常”,那么是的,这是正确的做法。

例如,您可能有一个UserRepository接口,并且您的实现目前正在使用SQL查找用户。您可以将您的接口方法标记为抛出自己的异常类型(例如,UserNotFoundException)。您的实现捕获任何与SQL相关的错误并抛出一个UserNotFoundException

这样,如果您将来切换到使用MongoDb或其他什么东西,您的接口将保持完全相同,而您的实现现在必须捕获MongoDb抛出的异常类型。使用您的接口的代码继续正确工作,因为它已经知道如何处理UserNotFoundException,而且没有改变。

请记住将原始异常作为您要抛出的新异常的cause,以避免丢失堆栈跟踪。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49806862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档