以前のものに依存する複数の検証を行う方法があります。これは純粋にフォーム/フロントエンドのない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;
}
結果が無効な場合は、エラーメッセージとともにすぐに戻る必要があります。それ以外の場合は、次の手順に進みます。
複数のステップがあるため、この方法は非常に大きくなり、単体テストを行うことはほとんど不可能になりました。
このメソッドを小さなものに分割したいと考えています。私は既に各ステップのすべてのビジネスロジックを別々のメソッドに移しましたが、依然としてこの大きなメソッドにはフローが残ります。
ソナーリントCCは47ですが、大きな心配です。
これを処理するには適切な方法が何であるかお勧めします。
ありがとうございます。
[コードレビュー](https://codereview.stackexchange.com/は)あなたが探しているものです。 –