gpt4 book ai didi

java - 在服务编排场景中,如何在没有检查异常的情况下处理错误?

转载 作者:行者123 更新时间:2023-11-30 02:29:29 25 4
gpt4 key购买 nike

大多数编程语言都没有检查异常(例如 C# 和 Kotlin)。

因此,我正在尝试为我的项目中的案例找到一种更好的方法,而不使用已检查的异常。

该项目使用 Java,我们通过远程 EJB 控制可能的验证错误。像这样的事情:

lookupSomeRemoteEjb().createCustomer(/** lots of informations */);

此方法会引发许多验证异常,例如:

DocumentoAlreadyExistsException();
InvalidNameException();
InvalidBirthDateException();

等等

这种异常可能发生在不同级别的不同类中。就像这个例子:

CustomerRemoteEjb.class // tell to the another system what error happened
CustomerService.class //can throw some errors about customer
PersonService.class // can throw some errors about person
DocumentService.class // can throw some errors about document
AddressService.class // can throw some errors about address

API 调用此远程 EJB 并捕获每个错误,将其转换为一条友好消息给 API 用户(使用此远程 EJB)。

效果很好,但是代码很困惑,每次调用都有很多难看的 try/catch。

我认为替代方案是使用带有 ID 错误的未经检查的异常,或者使用具有相同类型 ID 的 Result 对象来处理验证错误。

但是这个解决方案不太适合更复杂的代码(顺便说一句,单一系统),因为很多时候这些验证是由另一个服务调用的服务进行的。奇怪的是,这种深层服务在到达 API 之前会向另一个服务返回带有 ID 的异常(或结果对象)。

我读了一些old discussion about检查异常的替代方案,但还没有关于最佳替代方案的结论。我仍然同意那里的评论:

I'm reading the above discussion and I'm still left not knowing if exceptions are any good.

那么,在类似的情况下,如何使用不支持检查异常的语言解决此问题?

最佳答案

使用不同的检查异常确实有一个根本问题:它引入了版本兼容性问题。如果两端可以有不同的代码级别,您就必须担心 ejb 端使用“较新”的异常...

您的问题提供了一种可能的解决方案(通过使用某些返回对象)。但还有另一种选择:您可以选择单个异常,而不是无数个不同的异常。该异常带有某种错误 ID。

含义:用户错误消息不是从异常类型派生的,而是从某些数字 ID 派生的。当然,这种方法还有其他缺点 - 但它仍然解决了使用“每个问题一个异常类”方法时遇到的(部分)问题。

关于java - 在服务编排场景中,如何在没有检查异常的情况下处理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44596775/

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