2009-05-20 1 views
3

私は、RailsConf 2009で学んだことに基づいてアプリケーションを書き直しています。私はモデル、コントローラ、およびビューが互いに関係していることを理解しています。しかし、私が苦労してきたことの1つは、コントローラの「適切な」レベルです。RailsとMVCのメタファ

にRailsのコントローラーマップを何 ...データベーステーブルへのRailsのモデルマップ(おおよそ)の場合、ブラウザのページへのRailsのビューマップ(おおよそ)の場合...

答えて

3

コントローラは、ソリューションのロジック、制約、および条件を使用して、モデルをViewに接続する手段です。

だから、あなたのソリューションの "脳"にマッピングできると思います。

1

コントローラーは、実際に探しているコンテキスト内のものにはマップしません。コントローラを、モデルをビューに配置する際に使用する接着剤と考える必要があります。

モデルはデータをレイアウトします。

ビューはデータの表現をレイアウトします。

コントローラーは、要求を受け取り、適切なモデルとビューを取得し、その結果をユーザーに提示する責任があります。

-2

あなたが出始めたとき、私は物事が少し簡単に取得、私はこのようなことを考え助けMVCの1のメタファーを探している場合:

  • モデル - あなたのスケルトンは(物事の構造を支援)

  • コントローラー - あなたの筋肉(すべてが動いて得ることができますし、 必要なタスクを実行)

  • ビュー - あなたの外へ向かう出現(これは、世界が 他の二つの部分が何を見てみましょう)

私は自分がうまくいけば、それを「それを取得」してもらうために自分自身を考え出すことができ、最も簡単な方法です助けてください。ここでも、この部分のコントローラーは、アプリケーションの作業を行っているすべてのものに「対応」します。

+0

私はこれがあまり意味がないと思います。モデルは必要な作業を行う必要があります。コントローラーはスケルトンIMHOに似ています。 –

1

誰もがそれを接着剤や筋肉などに似せたいと思っていますが、それはモデルとビューの間の翻訳者であるため、それらのいずれにも適していません。マッスルは入力関数を提供せず、出力のみ、神経および感覚はその類推の入力を提供します。接着剤は2つのものを一緒に付着するだけで、それらは変化しない。

MVCのコントローラレイヤは、モデルからデータを取り出し、ビューアが表示する準備が整ったフォームに変換します。その完璧な例は、すべて同じ(または非常に似通った)形式でデータを表示する3つの異なるページですが、表示されるデータは非常に異なるソースから来ています。これらの各ケースでは、同じビューコードが使用されている可能性がありますが、コントローラーはモデル上でさまざまな関数を呼び出してデータを表示し、適切なコレクション名に入れてビューを検索して表示できるビューは実際には何を表示しているのか分かりませんが、ですが、です。

しかしコントローラレイヤのための唯一のタスクではありません。ユーザーの要求をモデル上のアクションに変換する必要もあるからです。ユーザーがリンクをクリックしたり、フィールドに何かを入力したり、スライダーをスライドさせたりすると、モデル上の1つ以上のアクションに変換される可能性があります。実際の意思決定のビジネスロジックであってはいけませんが、例えば「これを3回」と言ったチェックボックスを持っていても、そのモデルは何かを一度行う機能しか持っていなかった場合、コントローラはモデルの関数アクションを実行する時間。

アナロジーが必要な場合は、マイケルの「頭脳」の答えを使用します。

+0

"モデルからデータを取り出す責任を負う"、DAOを作るのは何か、コントローラ層のその部分ですか? –

0

コントローラはマネージャまたはコーディネータです。モデルやビューは、企業内の2つの異なるグループ(販売やITなど)と考えることができます。コントローラーは、その2つの上に座って、一緒にうまく遊ぶことを保証する人です。

これらのメタファーは何らかの形で欠陥があると言われていますが、たとえば、コントローラは、通常、ユーザがログインする必要があるページに対して、ユーザがログインしていることを保証します。これは、私の隠喩や他のものには本当に適合しません。

0

コントローラは、特にRESTFULリソースを使用している場合は、URLに密接にマッピングされます。

私はあなたのアプリケーションのコマンドラインインターフェイスとしてURLを考えています。