web-dev-qa-db-ja.com

別のコントローラーからコントローラー関数を呼び出すことをお勧めしますか?

1つのコントローラーで検索のロジックを処理していて、検索に基づいてデータを生成し、統計として返すケースがあります。

別のコントローラーからコントローラー関数を呼び出すのは良い習慣ですか?または、2つのコントローラーが決して「会話」してはなりませんか?

25
IAmJulianAcosta

これはかなり奇妙ですが、言語/フレームワークによってMVCのアプローチが異なるため、答えは使用する言語/フレームワークによって異なります。

一般に、次の理由により、あるコントローラーを別のコントローラーから使用しません。

  • コントローラーは通常、MVCフレームワークで使用することを目的とした型の結果を返します。この結果には、呼び出し元として必要としない多くの情報(ビューの名前など)が含まれており、関心のある情報に簡単にアクセスできるとは限りません(この場合、モデル、私が正しいと思う場合)。

  • コントローラは、HTTPリクエストとコンテキストに関するある程度の情報を必要とすることが多いため、ビジネスコードから初期化するのは簡単ではありません。このすべての情報は、MVCフレームワークによって渡されることが期待されています。

さらに重要なのは、2つのコントローラーで大量の検索結果が必要な場合-1つはエンドユーザーに結果を表示し、もう1つは統計を生成するコントローラー単純に検索ロジックをビジネスレイヤーに配置する(ここでちなみに、最初に属している)、コントローラをできるだけ小さくします。

MVCでのコントローラーの役割は、プロセスを調整することです。

  • リクエストから関連する入力を取得し、
  • 入力を検証/サニタイズするタスクをバリデーターに委任し、
  • ビジネスレイヤーの関連メソッドを呼び出す
  • 結果のモデルとビューをMVCフレームワークに渡します。

コントローラーの役割はビジネスロジックを処理することではありません。

コードがビジネスレイヤーに移動したら、1つのコントローラーを別のコントローラーから使用する場合とは異なり、明確で簡単な方法で再利用できる検索インターフェイスを提供できます。

27