gpt4 book ai didi

java - 嵌套 JAVA API 的简单异常处理

转载 作者:行者123 更新时间:2023-11-30 08:59:08 24 4
gpt4 key购买 nike

这次我有一个非常简单的“架构”问题。

假设我们有两个 API,一个“外部”和一个“内部”。外部的实现,对于他的每个方法,在它所做的其他事情中调用内部方法的对应方法(它是方法的一对一映射,每个远程方法都有一个对应的内部方法)。

附加信息:外部接口(interface)用@Remote 注释,内部接口(interface)(业务逻辑开发的地方)用@Local 注释。

对于异常处理,我的想法是创建 2 个异常:一个内部和一个外部。当然,外部会像服务一样包装内部。

用代码来说,情况是这样的:

@Stateless
public class RemoteServiceBean implements RemoteService
{
@Inject BusinessService businessSrv;
public method1(external parameters) throws RemoteException
{

try
{
bar();
businessSrv.method1(internal parameters);
}
//catch exceptions (also LocalException) and throws RemoteException
catch(Exception1 | LocalException ... e)
{
Logging....
throws RemoteException(e,e.getMsg());
}
}
}

@Stateless
public class BusinessServiceBean implements BusinessService
{
public method1(internal parameters) throws LocalException
{
try
{
foo();
}
//catch exceptions and throws LocalException
catch(Exception1 | Exception2... e)
{
Logging....
throws LocalException(e,e.getMsg());
}
}
}

问题是:假设服务架构必须保持这样,在您看来,异常处理是否正确?是否存在与此异常架构相关的问题?

欢迎所有提示。

谢谢!

最佳答案

我的想法在这件事上是非常主观的。

这样的设计让我觉得异常被认为是一种自然现象,应该定期捕获和处理。

直接引用 Joshua Bloch 的话:异常(exception)情况,顾名思义,仅在特殊情况下使用;他们永远不应该用于普通控制流程

我个人愿意遵循约定并尝试尽可能多地使用常规异常。过度使用异常和过于复杂的异常标准通常会使开发人员从一开始就放弃使用它们。当然,我并不是说所有与业务相关的异常都可以包含在标准异常中,但我经常看到代码片段,例如:

...
public void getEntityById(Long id)
{
...
if(id == null)
{
throw new BusinessRelatedConventionCompliantException(
1,4,TYPE.CORE_BUSINESS,"Entity id can not be null");
...
}
...
}

在我看来,大多数时候使用内置异常更合乎逻辑:

...
public void getEntityById(Long id)
{
...
if(id == null)
{
throw new IllegalArgumentException("Entity id param can not be null");
...
}
...
}

在我看来,单是非法参数异常就被忽略了很多次。

通过内置异常列表,我觉得大多数时候都有一些东西非常清楚地解释了问题所在。

对于本地异常和远程异常,在自定义异常处理方面,我是KISS原则的坚定支持者,我绝不会选择将它们分开。如果我一开始就选择使用我的自定义异常,那么它已经很少被使用了。我觉得分离增加的很少value 定义异常情况是什么,并添加更多样板。

所以总结一下,尽可能多地使用标准内置异常,仅在可恢复流中捕获异常,而不是用于控制和验证以及当涉及到异常时,尽可能简单。

关于java - 嵌套 JAVA API 的简单异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27383780/

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