我有一个类,其中有重复的代码,但略有不同:
public class ServiceImpl implements Service {
@Autowired
private OtherService otherService;
private static final int IN_ERROR_1 = 250;
private static final int IN_ERROR_2 = 1000;
private static final int IN_ERROR_3 = 251;
private static final int IN_ERROR_4 = 252;
private static final int IN_ERROR_5 = 253;
public String determineField(String value) {
ResponseDTO response = otherService.determineField(value);
if(response.getStatus != Status.OK) {
if(response.getRetCode() == IN_ERROR_1)
throw new CustomException(OutError.TECH_ERROR);
if(response.getRetCode() == IN_ERROR_2)
throw new CustomException(OutError.TECH_ERROR);
if(response.getRetCode() == IN_ERROR_3)
throw new CustomException(OutError.FUNC_ERROR);
if(response.getRetCode() == IN_ERROR_4)
throw new CustomException(OutError.FUNC_ERROR);
if(response.getRetCode() == IN_ERROR_5)
throw new CustomException(OutError.FUNC_ERROR);
}
return response.getField();
}
public Coords processValues(String value, String otherValue) {
Coords coords = new Coords();
ResponseDTO response = otherService.process(value, otherValue);
if(response.getStatus != Status.OK) {
if(response.getRetCode() == IN_ERROR_1)
throw new CustomException(OutError.TECH_ERROR);
if(response.getRetCode() == IN_ERROR_2)
throw new CustomException(OutError.TECH_ERROR);
if(response.getRetCode() == IN_ERROR_3)
throw new CustomException(OutError.TECH_ERROR); // DIFFERENT OUT ERROR TYPE FOR IN_ERROR_3 !
if(response.getRetCode() == IN_ERROR_4)
throw new CustomException(OutError.FUNC_ERROR);
// MISSING IN_ERROR_5 CASE !
} else {
coords.setCode(response.getCode());
coords.setName(response.getName());
}
return coords;
}
}
所以在这里我尝试重构错误处理,在这个类中,它实际上更大(更多的错误代码)并且重复了不止一次。事实上,类的大部分都是错误处理。
以下是我尝试过的:我最初想重构它,将错误处理放在一个方法中,并使用一些Map来获取out错误类型。但那是在我注意到细微差别之前。现在看来我无法按照我想要的方式重构。
有没有其他我没有考虑过的重构方法?
1条答案
按热度按时间axzmvihb1#
可以为每个错误代码构建Map,但略有不同。
现在您可以在呼叫端轻松区分它们。如果有更多需要区别对待的案例(例如,还有一个案例
251
可能Map到另一个案例),您需要enum
作为鉴别器,而不是boolean
.