2009-06-12 79 views
2

我有两个来自两个不同公司的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编写接口并保持通用。我正确处理这个问题吗?什么是最好的选择?

回答

14

在这种情况下,我创建了自己的Exception sublcass,只是包装了实际的异常。我的API然后只暴露我的异常。

+1

是的,创建你自己的Exception子类。确保您支持将Exception作为参数的Exception构造函数。您的API可以创建指定给此API的用户的异常,并且可以适当地包装来自您使用的第三方API的异常。这是最佳做法。 – Eddie 2009-06-12 18:32:22

3

想一下在调用函数的层次上你正在使用的抽象级别是什么。据推测,你不想公开你正在处理的单个公司的细节,并且倾向于处理更通用的概念,如订单,采购交易等。 因此,以前的海报建议很好:创建一个类似PurchaseException的类,它是这是你从供应商的个别异常类中得到的信息的一个包装。

1

另一个原因来处理Exception本地和推出自己的下游抛出(在必要时):

有可能是工作(清理,重试等),需要时执行特定类型的每个供应商都会抛出Exception

相关问题