WebサービスにRequestDTOを送信するクラスを作成しています。私はそれが送信される前に要求を検証する必要があります。循環器系の複雑さを減らすには?
リクエストは3つの異なる場所から送信でき、リクエストタイプごとに異なる検証ルールがあります。 (名前、住所、市、電話番号など)の長いリストを含むDTOを持っていて、それは関係なく送られた同じDTOです。どのタイプの要求であるか。
私は3つの異なる検証方法を作成し、そのタイプに基づいて適切なメソッドが呼び出されました。
これらのメソッドのそれぞれでは、各リクエストタイプに必要なフィールドをチェックするif-elseの長いリストがあります。
private void validateRequest1(Request request) {
StringBuilder sb = new StringBuilder();
if (null == request) {
throw new IllegalArgumentException("Request is null");
}
if (isFieldEmpty(request.getName())) { *see below
sb.append("name,"));
}
if (isFieldEmpty(request.getStreet())) {
sb.append("street,"));
}
...
isFieldEmpty()
チェックヌルとisEmpty()
のための文字列と私の質問があるので、これは私にそれらのいずれかの方法で28の循環的複雑度を与えるブール
を返します。..それはこの複雑さを低減することができますか?もしそうなら、私はどうしたらいいのですか?
最終的に、私は多くの分野をチェックする必要があると私は、これはチェックの多くなしで行うことができる方法を見ることができません:/
私の考えは:空の(または他の)チェック、および取るべきアクション( 'sb.append()')などをカプセル化する何らかの 'FieldChecker'オブジェクトを使用し、そのようなオブジェクト。これにより、そのチェックの出力と入力を明示的に定義する必要があるため、コードが明確になります。 – millimoose