3

RailsConf 2009で学んだことを基に、アプリケーションの書き直しに取り組んでいます。モデル、コントローラー、ビューが相互に関連していることを理解しています。しかし、私が苦労したことの1つは、コントローラーの「適切な」レベルです。

Railsモデルが(大まかに)データベーステーブルにマップされている場合...そしてRailsビューが(大まかに)ブラウザページにマップされている場合...

Rails Controllerは何にマップしますか?

4

6 に答える 6

3

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

したがって、ソリューションの「頭脳」にマッピングできると思います。

于 2009-05-20T01:38:12.667 に答える
1

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

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

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

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

于 2009-05-20T01:41:10.693 に答える
1

誰もがそれを接着剤や筋肉などに例えたいと思っていますが、モデルとビューの間のトランスレータであるため、それらのいずれにも当てはまりません. 筋肉は入力機能を提供するのではなく、出力、神経、および感覚のみがそのアナロジーで入力を提供します. 接着剤は 2 つのものを接着するだけで、それらを変更することはありません。

MVC のコントローラー層は、モデルからデータを取り出し、それをビューアーが表示できる形式に変換する役割を果たします。その完璧な例が 3 つの異なるページで、すべてが同じ (または非常に類似した) 形式でデータを表示しますが、表示されるデータは非常に異なるソースからのものです。これらのケースのそれぞれで同じビューコードが使用されている可能性がありますが、コントローラーは、モデルでさまざまな関数を呼び出して表示するデータを取得し、それを正しいコレクション名に入れて、ビューが見つけて表示できるようにすることを知っている人です。ビューは実際に表示されているものを認識していませんが。

ただし、コントローラー層のタスクはそれだけではありません。ユーザーの要求をモデルのアクションに変換する必要があるからです。ユーザーがリンクをクリックするか、フィールドに何かを入力するか、スライダーをスライドすると、モデルに対する 1 つ以上のアクションに変換される場合があります。意思決定の実際のビジネス ロジックであってはなりませんが、たとえば、「これを 3 回実行する」というチェック ボックスがあり、モデルに何かを実行する関数が 1 回しかない場合、コントローラーはモデルの関数を 3 回呼び出す責任があります。アクションを実行する回数。

類推が必要な場合は、マイケルの「頭脳」の答えを使用します。

于 2009-05-20T15:49:26.440 に答える
0

コントローラーはマネージャーまたはコーディネーターです。モデルとビューは、企業内の 2 つの異なるグループ (営業と IT など) と考えてください。コントローラーは、2 人の上に座って、2 人が一緒にうまくプレイできるようにする人です。

そうは言っても、これらの比喩はすべて何らかの形で欠陥があります。たとえば、コントローラーは通常、ユーザーがログインする必要があるページにユーザーがログインしていることを確認します。これは、私のメタファーや他のいくつかのメタファーには当てはまりません。

于 2009-05-20T16:04:54.240 に答える
0

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

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

于 2009-05-20T17:04:46.787 に答える
-2

MVC のメタファーを探している場合は、最初に物事を簡単に理解するのに役立ちました。次のようなことを考えました。

  • モデル- あなたの骨格 (物事の構造を助ける)

  • コントローラー- 筋肉 (すべてを動かし、必要なタスクを実行するのに役立ちます)

  • ビュー- あなたの外見 (他の 2 つの部分が何をするかを世界がどのように見ているか)

それが、私が自分自身を「手に入れよう」にするための最も簡単な方法です。繰り返しますが、この部分のコントローラーは、アプリケーションで作業を行っているものすべてに「マップ」します。

于 2009-05-20T01:43:07.213 に答える