Java 对于执行许多不同背景更改的facade方法,如何处理错误?

Java 对于执行许多不同背景更改的facade方法,如何处理错误?,java,api,oop,exception-handling,Java,Api,Oop,Exception Handling,假设我有一个如下所示的服务: public interface MyAccountService { boolean create( String user ); } create方法执行几个更改,即(为了便于讨论): 将消息添加到队列中 将一行添加到多个表中 创建LDAP帐户等 目前,我将所有错误消息折叠为一个布尔返回值。 现在,如果在内部出现错误,我将为支持团队记录这些错误 e、 g.用户创建失败的典型日志 按以下(严格)顺序创建“alistair”帐户: 添加到表Foo:suc

假设我有一个如下所示的服务:

public interface MyAccountService
{
    boolean create( String user );
}
create方法执行几个更改,即(为了便于讨论):

  • 将消息添加到队列中
  • 将一行添加到多个表中
  • 创建LDAP帐户等
  • 目前,我将所有错误消息折叠为一个布尔返回值。 现在,如果在内部出现错误,我将为支持团队记录这些错误

    e、 g.用户创建失败的典型日志

    按以下(严格)顺序创建“alistair”帐户:

    • 添加到表Foo:success
    • 添加到表格栏:成功
    • 添加到LDAP:失败
    • 添加到队列:成功
    这样,技术支持人员就可以决定如何修复该帐户

    设计系统以便于跟踪的最佳实践是什么 事务的成功/失败(并手动修复)?他回来了 布尔&吞并所有异常是一个好的设计吗


    编辑:通过接受异常,我的意思是不向调用方抛出异常。但是,我会记录异常,并将其转换为假/真返回值。

    这取决于需要

    如果异常是由客户端发送的错误信息引起的,并且您希望他们知道,以便他们更正,那么您应该抛出异常


    如果异常是由于内部问题引起的,但您仍然希望客户端知道,则抛出异常。

    否,不是。应记录有关异常的所有可用信息。(包括但不限于:异常类型、消息、堆栈跟踪等)

    我认为您有两个选项: 1.抛出带有成功列表的自定义异常,因此 API可以捕获异常并查看失败的内容,然后决定执行哪个操作。 2.返回一个枚举,其中反映了结果的所有可能结果,因此再次
    API的客户端可以决定他将执行的操作

    无论如何,您必须记录您的方法遇到的所有问题,以便跟踪它。。。 异常和问题吞咽是一种非常糟糕的做法


    我更喜欢自定义异常方法,因为枚举更像是C语言的API。

    我喜欢本文中描述的方法,这里有一个关于它的讨论

    这个想法是考虑到例外,并以不同的方式处理:

    一种例外情况是意外情况,这意味着由于已知问题而无法成功执行的流程(他使用的示例是支票账户,该账户资金不足,或支票已停止付款)。这些问题应通过不同的机制处理,代码应该能够管理它们

    另一种类型的异常是 错误,例如IOException。A. 错误通常不是 是或应该是预期的,以及 因此,处理故障应 可能不是正常生活的一部分 过程


    我澄清了我上面的问题。我会记录例外情况。选项1是一个合理的选项。我是否应该尝试以非事务方式执行所有4个操作?意思:如果我在插入表Foo时遇到问题,我会记住错误并继续执行所有其他任务。或者我应该短路并中止?请注意,除了队列操作之外,所有任务都是幂等的,因为DB表和LDAP服务器不接受重复的条目。这取决于您的应用程序。如果您需要在一个事务下完成所有任务,那么如果发生任何错误,您需要回滚所有更改为子系统的任务。在这个场景中,只需进行回滚并抛出异常即可。另一方面,如果只更新数据库和LDAP并指示客户机JMS调用失败是可以的,那么不要运行事务,只要记住每个错误并通过异常通知用户即可。