3

私はこれについて矛盾することを読みました。

ウィキペディアから:

コントローラー 処理し、イベント (通常はユーザー アクション) に応答し、モデルの変更を呼び出す場合があります。

紛らわしいのは典型的な言葉です。ユーザー入力だけではない場合、他に何がありますか?

4

6 に答える 6

3

私はコントローラーをCoordinatorと見なします。通常、ほとんどのコードはコントローラーにあります。これは、ほとんどのブランチが発生する場所です。ビューまたはモデルでは、ほとんどのコードがそれ自体を処理します (データ オブジェクトはビュー オブジェクトについて何も知りません)。ただし、コントローラーはデータオブジェクト(モデル)をビューオブジェクトに一致させるため、コーディネーターとして考えています。

MVC に十分に従っているかどうかを確認するためにアプリケーションに適用できる一般的な「テスト」: アプリケーションのスキンを変更するのは非常に簡単ですか? (大量のコードを書き直さずにビューを交換します)。

MVC を取り巻く宗教的な議論や厳格な「ルール」にとらわれないでください。MVC の「ルール」の 80% に従うだけで利益を上げられる製品は、まだ完成していない複雑すぎて実際には実行できない製品よりも優れています。右に走る...

于 2008-12-10T19:07:08.047 に答える
2

いいえ。従来のパターンでは、コントローラーは任意のソースから入力を取得できました。Ruby/Rails や ASP.NET MVC などの Web ベースの MVC フレームワークの場合、コントローラーはクエリとフォーム パラメーターから入力を取得します。

MVC の詳細については、http://en.wikipedia.org/wiki/Model-view-controllerを参照してください。

編集:任意のソースからの入力と言うとき、入力ソースへのGUIやその他のインターフェースを持つ可能性のあるアプリケーション、たとえばコントローラーと対話してモデルを更新するセンサーサブシステムを考えています。

編集: 更新に基づいて、ゲームがマルチプレイヤー インターネット ゲームである場合、コントローラーはネットワーク イベントに応答できます。これらは、ユーザー入力デバイスのコントローラーによって処理されません。

于 2008-12-10T17:47:51.967 に答える
2

コントローラーの役割は、アプリケーション フローを管理することです。リクエストを処理し、適切なモデル/ビュー/ヘルパーを合成し、オプションでレスポンスを発行します。

リクエストは、Web サービスやローカル サービス、時限イベントなど、さまざまなソースから発生する可能性があります。

于 2008-12-10T17:53:09.663 に答える
0

ビューのユーザー入力部分の検証とサニタイズを呼び出します。

私はコントローラーを背後のロジックと呼んでいます。これは、検証済みでサニタイズされたデータを受け取り、それを処理する部分です。そうすれば、コントローラーにデータを提供して結果をテストするビューとして機能するテスト ハーネスを作成できます。

于 2008-12-10T17:48:48.970 に答える
0

いいえ、モデルとビュー (UI 画面) の間のすべての対話に使用する必要があります。これには、モデルから取得した UI 画面 (画面の更新) でのデータの表示、およびユーザー入力/対話への応答が含まれます。 UI画面...

また、このユーザーの OTHER 画面でのアクションによる (データ内の) モデルの変更の結果としての UI 画面の更新、または (複数ユーザーの同時実行システムでは) 他のユーザーのデータ内のデータへのアクションも含まれる場合があります。リポジトリ (データベース)

于 2008-12-10T17:50:06.003 に答える
0

必ずしも。コントローラーは、ユーザー入力を処理し、モデルを更新し、ビュー ページの代わりに JSON 結果または動的に生成された画像を直接返すことを決定できます。

コントローラは、ページ フローも決定できます。ユーザーは Web サイトの「マイ アカウント」リンクをクリックしますが、まだログインしていないため、ログイン ページに誘導されます。ログインが成功すると、コントローラーは、ReturnUrl クエリ パラメーターを使用して、ユーザーを「マイ アカウント」ページにリダイレクトするかどうかを決定できます。

コントローラーに検証ロジックを配置することもできますが、大規模なプロジェクトにはこのアプローチをお勧めしません。そのロジックはモデルに属します。

于 2008-12-10T17:52:04.783 に答える