【问题标题】:Is it legitimate to have business logic inside a finally block? [closed]在 finally 块中包含业务逻辑是否合法? [关闭]
【发布时间】:2019-11-25 09:14:24
【问题描述】:

我有一个与控制结构纠缠在一起的方法。它有多种退出方式。在离开方法之前,我需要做一些最后的处理。与其在每次退出之前重复相同的逻辑或在方法中重构该逻辑并多次调用它,不如将其留在 finally 块中似乎很方便。它真的是 finally 的合法使用还是我在滥用它?

【问题讨论】:

  • 如果你的程序应该例如退出(ThreadDeath),您的业务逻辑被执行。我建议您在此之后捕获异常并执行您的业务逻辑。
  • 我建议重构整个事情,这样它就不会像你说的那么复杂。
  • 我看不出有什么问题。确保 finally 中的代码不会引发任何异常,否则您可能也需要在 finally 中使用 try 块
  • 视情况而定。如果你在一个单一的控制结构中有这么多的纠缠,那么它很可能缺少重构。
  • 另外,这取决于它对任务的关键程度:请记住,finally 不能保证仅仅因为断电、人们绊倒电源线、VM 崩溃、kill-9 等而启动所有可能发生的真实事情。

标签: java dry business-logic finally


【解决方案1】:

finally 是有原因的,添加必须在退出块之前执行的逻辑

如果您不想/不需要使用AOP/AspectJ,这是一个有效的方法选择

请注意,您可能必须使用finally作为Connection发布资源

例如,当您必须在方法结束时审核/记录或进行自主事务时,您可以使用它

正如@DaveNewton 评论,在某些情况下可能有更好的重构/分离逻辑的方法,但你不能忽视这是一种有效的用法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 2016-06-23
    • 2010-09-11
    • 2018-07-30
    • 2010-10-10
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多