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


23

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

別のコントローラーからコントローラー関数を呼び出すことをお勧めしますか?または、2つのコントローラーが「通信」することはありませんか?

回答:


24

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

一般的に、次の理由から、あるコントローラーを別のコントローラーから使用することはありません。

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

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

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

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

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

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

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


こんにちは、ご返信いただきありがとうございます。検索ロジックをビジネスレイヤーに移動したと仮定すると、検索インターフェイスを配置するのに最適な場所はどこですか?私はLaravelを使用しています。
IAmJulianAcosta 14

残念ながら、私はLaravelを使用したことがありません。さらに、答えはフレームワークではなく、アプリケーションのアーキテクチャにより依存すると思います。
Arseni Mourzenko

あなたがルートプロジェクトと同じレベルのhttpフォルダーにいると仮定します。ここにコントラクトという名前のフォルダーを作成し、ここに配置できるインターフェイスとして機能するすべてのファイルを作成できます
ファリスレイハン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.