数据库层中异常处理的设计模式

时间:2016-10-31 07:51:48

标签: java spring-data

我的系统有2个主要层,即服务层和数据库访问层。

我将接口暴露给服务层以进行数据库操作。

现在,在这个接口中,有一些例外可以被DAO层的每个操作抛出,例如,超时异常等 -

除了使用throws ExceptionName明确指定每个方法之外,有没有办法表达此规范?

2 个答案:

答案 0 :(得分:1)

  

有没有办法表达这个规范,除了为每个抛出ExceptionName的方法显式指定?

没有。遗憾。

您可以通过(重新)实现自定义异常作为层次结构来减少样板量。但除非您希望取消选中 1 ,否则需要一些样板。

1 - 这也有缺点。如果您取消选中,则会丢失编译时检查未处理的异常。

答案 1 :(得分:1)

这里有多种选择;但我认为我的“意见”在某种程度上与你现在在很多地方会发现的“最佳实践”相匹配:

  • 如果要使用已检查的异常,则创建一些抽象基本异常并将其放在您的抛出列表中。因为你真的不希望在你的投掷列表中有两个以上的例外。仅仅因为这些广泛的投掷列表随着时间的推移而增长,并且它们很快污染所有层。
  • 您也可以不使用已检查的例外!相反:抛出适当的运行时异常,并通过接口上的javadoc记录该事实。许多人认为,已检查和未检查的例外之间的“战争”是超过,并且未选中获胜。因为无论如何你需要一些“通用的东西捕捉”的东西。所以,无论如何,当代码被编写时,为什么喧嚣与那些维护密集的投掷列表?!