我有一种方法可以执行多个验证,这些验证依赖于较早的验证。这纯粹是一个没有表单/前端的REST服务。例如Java多步验证方法 - 重构
public Json processPayment(User user, Amount amount, CardData cardData) {
Json result = new Json();
Json userResult = validateUser(user);
if (userResult.isNotValid())
result.put("errorCode", userResult.get("errorCode");
result.put("message", userResult.get("message");
return result;
}
Merchant merchant = getMerchant(user);
Json merchantResult = validateMerchant(user);
if (merchantResult.isNotValid())
result.put("errorCode", merchantResult.get("errorCode");
result.put("message", merchantResult.get("message");
return result;
}
Json limitsResult = validateLimits(user, merchant, amount);
if (limitsResult.isNotValid())
result.put("errorCode", limitsResult.get("errorCode");
result.put("message", limitsResult.get("message");
return result;
}
// Like above there are few more steps.
.
.
.
// All validations are fine process transaction.
Json transactionResult = processTransaction(user, merchant, amount, cardData);
if (transactionResult.isNotValid())
result.put("errorCode", transactionResult.get("errorCode");
result.put("message", transactionResult.get("message");
} else {
result.put("message", "Transaction Successful");
result.put("referenceNumber, transactionResult.get("rrn");
}
return result;
}
在每个步骤中,如果结果是无效的,那么就应该立即与返回错误消息,否则继续下一步。
由于多个步骤,此方法变得太大,几乎不可能进行单元测试。
我想将此方法分解为更小的方法。我已经将每个步骤的所有业务逻辑转变为单独的方法,但流程依然存在于这个大方法中。
Sonarlint CC是47这是一个很大的担心。
请建议什么是正确的方法来处理这个问题。
谢谢。
[代码审查(https://codereview.stackexchange.com/)是你在找什么。 –