gpt4 book ai didi

java - 记录异常并继续执行而不会使代码困惑

转载 作者:行者123 更新时间:2023-11-30 07:45:38 26 4
gpt4 key购买 nike

我正在考虑在我的应用程序上实现标准错误处理。我想要无法处理的错误(自定义未经检查的错误),但也不是灾难性的,可以通过故障屏障记录下来,而不必用讨厌的 try catch 和记录器调用使我的代码困惑。

让我举例说明。我有一个接收 json 字符串并将其设置到我的对象模型中的摄入量,所述模型中的一个字段调用 timeHelper 函数,如果参数无效(null 或空),该函数可以抛出异常。这个函数的产量对程序来说并不重要,事实上这个程序应该永远不会崩溃(尽我所能),因为它应该保持 24/7 全天候运行。

模型

public class MyModel{
private string myField
public void setMyField(String myfield){
this.myField = Helper.DoStuff(myField)
}
}

摄入量

public class Intake{
public MyModel receiveJson(){
return JacksonMagic(arguments,MyModel.class)
}
}

助手

Public class Helper{

public String DoStuff(String myField){
//Check that can throw exception
//regular operation with return
}
}

现在,当生活变得美好时 DoStuff 返回一个字符串,实际上永远不应该抛出异常,因为它暗示我的应用程序外部的 json 源发送错误/丢失信息。如果它真的发生了,我希望它被记录下来,这样我就可以调查发生了什么。我还想设置一个框架,可能使用 Spring AOP,来处理该日志记录。但是正如您通过示例看到的那样,我还希望继续执行,因为这不是一些破坏应用程序的事情。

我正在寻找的执行流程是这样的Intake > Model > Helper(THROW EXCEPTION) > Logger > Whoever Called Intake

再一次,我想在没有 try catch logger call cluter 的情况下做到这一点

AOP 可以做到这一点吗?

发布答案编辑只想在这里留下一些来源。

要为 AspectJ 编译设置 IDE,这篇文章真的很有帮助。 https://www.baeldung.com/aspectj

最佳答案

这不是异常的好用例。

异常表示您无法处理的事情,您无法处理的“异常”事件。事实上,您说这是一种可能的情况,将其从异常变为用例,在这种情况下,在您的服务层中记录警告可能是最好的解决方案。

异常有它们的位置,但是过度使用它们会使代码更难遵循,因为它破坏了应用程序的“流程”。不应使用异常来控制流程。

AOP,在我看来,在异常处理方面提供的很少。它充其量可以记录异常(这也可以使用 ExceptionHandler 模式以更清晰的方式实现),但是它肯定不能触发您的代码继续,就好像它没有发生一样。

如果您还没有,请查看日志记录策略,它们在这种情况下非常有用。

底线是:如果您希望控制流继续,请不要抛出异常(已检查或未检查)。

关于java - 记录异常并继续执行而不会使代码困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51601356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com