我有来自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的接口并使其保持通用。我正确地处理了这件事吗?什么是最好的选择?
答案 0 :(得分:14)
在这种情况下,我创建自己的Exception子类,并包装实际的异常。我的API仅公开我的异常。
答案 1 :(得分:3)
考虑一下你在调用函数级别上所处的抽象级别。据推测,您不希望公开您正在处理的各个公司的详细信息,并且更愿意处理更多通用概念,如Orders,PurchaceTransactions等。 所以上一张海报的建议很好:创建一个像PurchaseException这样的类,它是从供应商的个别异常类中获取的信息的包装。
答案 2 :(得分:1)
本地处理Exception
的另一个原因是自己向下游投掷(必要时):
当抛出因供应商而异的Exception
特定类型时,可能需要执行工作(清理,重试等)。