我有一種方法可以執行多個驗證,這些驗證依賴於較早的驗證。這純粹是一個沒有表單/前端的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/)是你在找什麼。 –