这类情况的异常处理模式?

时间:2009-06-12 18:24:25

标签: java exception

我有来自2家不同公司的2个API,这些API允许我与他们的服务器通信以处理交易。我的任务是创建这些API的通用接口。我想出了类似的东西:

IServiceProvider <- ServiceProvider <- CompanyAServiceProvider
IServiceProvider <- ServiceProvider <- CompanyBServiceProvider

CompanyAServiceProvider我正在使用他们提供的API来与远程服务器连接。 A公司的API会抛出与公司B完全不同的例外情况。

我可以在本地处理异常,但我并不认为这适用于这种情况。

public String purchase(String amount) {
  try {
    request = new Request( RequestIF.NEW_ORDER_TRANSACTION );
  } catch ( InitializationException e ) {
    //do something.
  }
}

或者我可以将此异常抛给调用者:

public String purchase(String amount) throws Exception {
  request = new Request( RequestIF.NEW_ORDER_TRANSACTION );
}

让调用者只处理Exception,无论该异常是什么,无论API抛出它。

当我处理2组不同的抛出异常时,如何编写2个不同API的接口并使其保持通用。我正确地处理了这件事吗?什么是最好的选择?

3 个答案:

答案 0 :(得分:14)

在这种情况下,我创建自己的Exception子类,并包装实际的异常。我的API仅公开我的异常。

答案 1 :(得分:3)

考虑一下你在调用函数级别上所处的抽象级别。据推测,您不希望公开您正在处理的各个公司的详细信息,并且更愿意处理更多通用概念,如Orders,PurchaceTransactions等。 所以上一张海报的建议很好:创建一个像PurchaseException这样的类,它是从供应商的个别异常类中获取的信息的包装。

答案 2 :(得分:1)

本地处理Exception的另一个原因是自己向下游投掷(必要时):

当抛出因供应商而异的Exception特定类型时,可能需要执行工作(清理,重试等)。