Java 想要一些建议来清理一系列if语句吗
我有一个方法,它做了大量的验证,它正在失控。如果您能就如何最好地清理这种方法提出建议,我将不胜感激。我使用的是Java11,这个方法是SpringBoot微服务的一部分Java 想要一些建议来清理一系列if语句吗,java,refactoring,Java,Refactoring,我有一个方法,它做了大量的验证,它正在失控。如果您能就如何最好地清理这种方法提出建议,我将不胜感激。我使用的是Java11,这个方法是SpringBoot微服务的一部分 public void validateRequest(DepositRequest depositRequest, String transferId, String userId) { if (!Arrays.asList("REALTIME_PAYMENT", "ACCOUNT_PAY
public void validateRequest(DepositRequest depositRequest, String transferId, String userId) {
if (!Arrays.asList("REALTIME_PAYMENT", "ACCOUNT_PAYMENT").contains(depositRequest.creditTransfer()
.getTransferInformation().getValue())) {
logError(depositRequest, participantUserId, etransferId, INVALID_ACCOUNT_NUMBER);
throw new ServerValidationException(INVALID_ACCOUNT_NUMBER, PAYMENT);
}
if (depositRequest.creditTransfer().getGroupHeader().getSettlementInformation().getClearingSystem() == null) {
logSchemaValidationError(depositRequest, etransferId, participantUserId, "proprietary");
throw new ServerValidationException(SCHEMA_VALIDATION_ERROR, PAYMENT);
}
if (depositRequest.creditTransfer().getGroupHeader().getInstructing()
.getInstitutionIdentification().getMemberIdentification() == null) {
logSchemaValidationError(depositRequest, etransferId, participantUserId, "member_identification");
throw new ServerValidationException(SCHEMA_VALIDATION_ERROR, PAYMENT);
}
if (depositRequest.creditTransfer().getGroupHeader().getInstructed()
cialInstitutionIdentification().getMemberIdentification() == null) {
logSchemaValidationError(depositRequest, etransferId, participantUserId, "member_identification");
throw new ServerValidationException(SCHEMA_VALIDATION_ERROR, PAYMENT);
}
if (depositRequest.creditTransfer().getTransferInformation().getCreditor().getName() == null) {
logSchemaValidationError(depositRequest, etransferId, participantUserId, "creditor.name");
throw new ServerValidationException(SCHEMA_VALIDATION_ERROR, PAYMENT);
}
if (depositRequest.creditTransfer().getTransferInformation().getDebtor().getName() == null) {
logSchemaValidationError(depositRequest, etransferId, participantUserId, "debtor.name");
throw new ServerValidationException(SCHEMA_VALIDATION_ERROR, PAYMENT);
}
if (depositRequest.authorization() != null) {
if (depositRequest.authorization().getToken() == null ||
authorization().getToken().length() < 1 ||
authorization().getToken().length() > 35) {
logSchemaValidationError(depositRequest, etransferId, participantUserId, "participant_authorization_token");
throw new ServerValidationException(SCHEMA_VALIDATION_ERROR, PAYMENT);
}
}
if (!isCreditorAccountIdentificationValid(depositRequest.creditTransfer().getTransferInformation().getIdentification())) {
logSchemaValidationError(depositRequest, etransferId, participantUserId, "identification");
throw new ServerValidationException(INVALID_ACCOUNT_INFO, PAYMENT);
}
if (!depositRequest.creditTransfer().getTransferInformation().getSettlementDate().equals(LocalDate.now())) {
logSchemaValidationError(depositRequest, etransferId, participantUserId, "settlement_date");
throw new ServerValidationException(SCHEMA_VALIDATION_ERROR, PAYMENT);
}
}
public void validateRequest(存款请求存款请求、字符串传输ID、字符串用户ID){
如果(!Arrays.asList(“实时付款”,“帐户付款”)包含(存款请求.贷记转账()
.getTransferInformation().getValue()){
日志错误(depositRequest、participantUserId、etransferId、无效的帐户号);
抛出新的ServerValidationException(无效的帐户号、付款);
}
if(depositRequest.creditTransfer().getGroupHeader().getSettlementInformation().getClearingSystem()==null){
logSchemaValidationError(depositRequest、etransferId、participantUserId,“专有”);
抛出新的ServerValidationException(模式\验证\错误,付款);
}
if(存款请求.creditTransfer().getGroupHeader().getInstructing())
.getInstitutionIdentification().getMemberIdentification()=空){
logSchemaValidationError(存款请求、etransferId、参与者用户ID、“成员标识”);
抛出新的ServerValidationException(模式\验证\错误,付款);
}
如果(存款请求.creditTransfer().getGroupHeader().getInstructed())
cialInstitutionIdentification().getMemberIdentification()==null){
logSchemaValidationError(存款请求、etransferId、参与者用户ID、“成员标识”);
抛出新的ServerValidationException(模式\验证\错误,付款);
}
if(DepostRequest.creditTransfer().getTransferInformation().GetCredit().getName()==null){
LogSchemaValidationOnError(存款请求、etransferId、participantUserId、“债权人名称”);
抛出新的ServerValidationException(模式\验证\错误,付款);
}
if(DepostRequest.creditTransfer().getTransferInformation().GetDebter().getName()==null){
LogSchemaValidationOnError(存款请求、etransferId、participantUserId、“债务人名称”);
抛出新的ServerValidationException(模式\验证\错误,付款);
}
if(存款请求.授权()!=null){
if(DepostRequest.authorization().getToken()==null||
授权().getToken().length()<1||
授权().getToken().length()>35){
LogSchemaValidationOnError(存款请求、etransferId、participantUserId、“参与者授权令牌”);
抛出新的ServerValidationException(模式\验证\错误,付款);
}
}
如果(!isCreditorAccountIdentificationValid(depositRequest.creditTransfer().getTransferInformation().getIdentification())){
logSchemaValidationError(存款请求、etransferId、参与者用户ID、“标识”);
抛出新的ServerValidationException(无效的帐户信息、付款);
}
如果(!depositRequest.creditTransfer().getTransferInformation().getSettlementDate().equals(LocalDate.now())){
logSchemaValidationError(存款请求、etransferId、参与者用户ID、“结算日”);
抛出新的ServerValidationException(模式\验证\错误,付款);
}
}
简单的代码就是好代码。您当前的代码易于理解和维护。所以我不必急于改变它。但如果你愿意,你可以:
public void validateRequest(DepositRequest depositRequest, String transferId, String userId) {
validateAccountNumber(depositRequest,transferId, userId);
...
}
private void validateAccountNumber(DepositRequest depositRequest, String transferId, String userId) {
...
}
public interface Validator {
void validate(DepositRequest depositRequest, String transferId, String userId);
}
public class AccountIDValidator implements Validator {
public void validate(DepositRequest depositRequest, String transferId, String userId){
...
}
}
List<Validator> validators=Arrays.asList(new AccountIDValidator(),...);
public void validateRequest(DepositRequest depositRequest, String transferId, String userId) {
for (Validator v:validators){
v.validate();
}
}
List validators=Arrays.asList(新AccountIDValidator(),…);
public void validateRequest(存款请求存款请求、字符串transferId、字符串userId){
for(验证器v:验证器){
v、 验证();
}
}