Java | 早期リターン(ガード節)のメリットと注意点

Java Java
スポンサーリンク

総合サンプルコード(リファクタリング版)

前回の「入力チェック+外部API呼び出し+レスポンス返却」の例を、さらに リファクタリング(改善) して「レスポンス生成を共通化」したバージョンを紹介します。これにより、コードの重複が減り、テストや保守がしやすくなります。


改善後のサンプルコード

public class UserController {

    public Response getUserProfile(Request req, ExternalApi api) {
        // --- 早期リターンで入力チェック ---
        if (req == null) return errorResponse(400, "リクエストが空です");
        if (req.getUserId() == null || req.getUserId().isEmpty()) {
            return errorResponse(400, "ユーザーIDが必要です");
        }

        // --- 例外処理で外部要因をカバー ---
        try {
            UserProfile profile = api.fetchProfile(req.getUserId());
            if (profile == null) {
                return errorResponse(404, "ユーザーが見つかりません");
            }
            return successResponse(200, "成功", profile);

        } catch (IOException e) {
            return errorResponse(503, "外部サービスエラー: " + e.getMessage());
        } catch (Exception e) {
            return errorResponse(500, "予期せぬエラー: " + e.getMessage());
        }
    }

    // --- 共通化したレスポンス生成メソッド ---
    private Response errorResponse(int code, String message) {
        return new Response(code, message);
    }

    private Response successResponse(int code, String message, Object data) {
        return new Response(code, message, data);
    }
}
Java

改善ポイント

  • レスポンス生成を共通化
    errorResponsesuccessResponse を用意して、重複コードを削減。
  • 読みやすさアップ
    → 「何を返しているか」がメソッド名で明確になる。
  • テストしやすさ
    → 共通メソッドをテストすれば、全体のレスポンス生成が保証される。
  • 保守性向上
    → エラーメッセージのフォーマットを変更したいときも、共通メソッドを直すだけで済む。

テスト設計の観点

  • 入力チェックテストreq = null → 400エラー
  • 正常系テスト → 正しい userId → 200成功+プロフィール返却
  • 外部要因テスト → APIモックで例外を投げる → 503 or 500エラー
  • 共通メソッドテストerrorResponsesuccessResponse を直接テスト可能

✅ このように「レスポンス生成を共通化」することで、コードの重複を減らし、テストや保守が圧倒的に楽になります。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました