我在serviceA中有两个API调用serviceB的同一个API。唯一不同的是,这两个API调用serviceB的API的请求参数不同。因此,serviceA中的两个API有共同的异常需要处理,但也有独特的异常需要处理。下面是一个简单的代码示例
public class ServiceB {
public Response someAPI(Request request) {
//some common business logic
if (request.param1 != null) {
//some logic that only applies if param1 is present
if (someUniqueError) {
throw new someUniqueException();
}
}
if (errorCondition1) {
throw new Exception1();
} else if (errorCondition2) {
throw new Exception2();
}
return response;
}
}
public class ServiceA {
public void op1(Param1 param1, Param2 param2) {
...
Request request;
request.setParam1(param1);
request.setParam2(param2);
Response response;
try{
response = ServiceBClient.someAPI(request);
} catch (SomeUniqueException e) {
//some error handling
} catch (Exception1 e) {
//some error handling
} catch (Exception2 e) {
//some error handling
}
...
}
public void op2(Param2 param2) {
...
Request request;
request.setParam2(param2);
Response response;
try{
response = ServiceBClient.someAPI(request);
} catch (Exception1 e) {
//some error handling
} catch (Exception2 e) {
//some error handling
}
...
}
}
我的问题是,我应该提取服务电话到 someAPI
到一个辅助函数,这样我就不会有重复的异常处理逻辑,还是应该由每个API负责自己的错误处理?这里有什么好的做法?
我正在考虑的helper
private Response helper(Request request) {
Response response;
try{
response = ServiceBClient.someAPI(request);
} catch (SomeUniqueException e) {
//some error handling
} catch (Exception1 e) {
//some error handling
} catch (Exception2 e) {
//some error handling
}
return response;
}
有了一定的把握,你可能至少应该将你的部分代码解压缩到某个 sendRequest
方法.免责声明是,要想完全确定,就必须了解你的应用的业务需求。
现在你只需要决定是否要处理好 UniqueException
只在 op1
. 如果是这样,你应该把 try/catch
的异常。否则就把它移到帮助程序中,就像你做的那样。
根据你系统的复杂程度,以及是否有可能同时拥有 op3
, op4
等,你可能要考虑创建一个。RequestBuilder
也是