提取服务调用到助记器?

问题描述 投票:1回答:1

我在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;
}
java exception api-design
1个回答
0
投票

有了一定的把握,你可能至少应该将你的部分代码解压缩到某个 sendRequest 方法.免责声明是,要想完全确定,就必须了解你的应用的业务需求。

现在你只需要决定是否要处理好 UniqueException 只在 op1. 如果是这样,你应该把 try/catch 的异常。否则就把它移到帮助程序中,就像你做的那样。

根据你系统的复杂程度,以及是否有可能同时拥有 op3, op4等,你可能要考虑创建一个。RequestBuilder也是

© www.soinside.com 2019 - 2024. All rights reserved.