私は春にMVCパターンに従ってWebアプリケーションに取り組んでおり、堅実なサービスレイヤーを作成するための「ベストプラクティス」とは何を考えているのか疑問に思っていました. この質問の理由は、次の例の状況です。
ユーザー情報を編集するページが読み込まれます。このフォームが送信された後、次のアクション (ユーザーの更新) に必要なデータのみを含む特定の Command クラスのコントローラー メソッドですべてのデータを収集します。
この情報をサービス層に渡すには、いくつかの状況が考えられます。
- コマンド自体を渡す: userService.save(command);
- コントローラーでフェッチされたモデル クラスを渡す: userService.save(user);
- モデル クラスとコマンドの両方を渡す: userService.save(user, command);
- すべてのパラメーターを個別に渡す: userService.save(command.getName(), ...)
私の意見では、コマンド クラス自体を渡すことは、最初にフレームワークを使用してすべての値を自動的に検証してからサービスに渡すことができるため、最も洗練されたソリューションのように見えます。ここでの懸念は、別のクラスからメソッドを呼び出すと (フォーム/コントローラーではなく)、このコマンド オブジェクトに無効なデータを入力して、サービス レイヤーでエラーが発生する可能性があることです。
何をお勧めしますか?その理由は?