0

MVC は、モデル、ビュー、コントローラーの略です。Backbonejs.or は、これを Rails と比較して説明しています。詳細はこちらと以下をご覧ください。Rails を知らないので、この比較はまったく意味がありません。以下の抜粋では、コントローラーが強調表示されています。おそらく、厳密には MVC ではない理由です。それが何を推測しているのかわかりません。Backbone が厳密な MVC ではないということはどういう意味ですか?

Backbonejs.org サイトから抽出します (ソースはこちら)。

バックボーンは「従来の」MVC とどのように関係していますか?

Model-View-Controller パターンのさまざまな実装では、コントローラーの定義について意見が一致しない傾向があります。バックボーンでは、View クラスは一種のコントローラーと考えることができ 、UI から発生したイベントをディスパッチし、HTML テンプレートが真のビューとして機能します。これをビューと呼びます。これは、単一の DOM 要素のコンテンツを担当する UI の論理チャンクを表すためです。

バックボーンの全体的な構造を、Rails のようなサーバー側の MVC フレームワークと比較すると、次のように並べられます。

  • Backbone.Model – クラス メソッドを除いた Rails モデルのようなもの。ビジネス ロジックでデータの行をラップします。
  • Backbone.Collection – クライアント側のモデルのグループで、並べ替え/フィルタリング/集計ロジックを備えています。
  • Backbone.Router – Rails routes.rb + Rails コントローラー アクション。URL を関数にマップします。
  • Backbone.View – 論理的で再利用可能な UI です。多くの場合、常にではありませんが、モデルに関連付けられています。
  • クライアント側のテンプレート– HTML のチャンクをレンダリングする Rails .html.erb ビュー。

明らかに MVC ではない理由を強調するためにイタリック体を追加しました。上でモデルとビューの用語を見つけることができますが、この用語controllerは明示的に省略されており、代わりにルーター、コレクション、およびテンプレートという用語が使用されています。ルーター/コレクション/テンプレートがコントローラーではないのはなぜですか?

このコントローラーの定義controller mediates input, converting it to commands for the model or view(ウィキペディアはこちら) は少しあいまいです。

4

2 に答える 2

2

特にRailsはMVCにインスパイアされたデザインパターンの実装にはほど遠いので、かなり面白い声明です. 実際、BackboneJS の解釈は MVC のアイデアに非常に近いと言えます。

ビューは単なるテンプレートではありません。すべてのプレゼンテーション ロジック (および、従来の MVC、Model2 MVC、および HMVC パターンの場合はアクティブな構造) を担当する必要があります。

Rails フレームワークが実装するものは、「ORM、テンプレート、アダプター」アンチパターンとしてより適切に説明できます。ビジネス ロジックとプレゼンテーション ロジックの両方が「コントローラー」と呼ばれるものに強制されます。

BackboneJS が実装するものは、実際には、viewmodel がパッシブ ビューに情報を提供する MVVM デザイン パターンに近いものです。次に、ビューはそれをどうするか、どのテンプレートを採用するかを決定します。

于 2012-07-30T17:39:46.780 に答える
0

私が理解しているように、従来の MVC パターンには次の要素があります。

モデル - データのみを保持します (おそらくいくつかのデータ処理方法)

ビュー - データの一部をユーザーに表示する視覚的およびインタラクティブな要素をレンダリングします。

コントローラー - モデルとビューの間、およびユーザーとコードの間の対話を処理します (たとえば、モデルの更新時、ビューの再レンダリング時、ユーザーがボタンをクリックしたとき、モデル内のデータを変更するとき)。

Backbone には、明示的なコントローラーはありません。代わりに、この制御機能は次の要素によって実行されます。a) ビュー自体 (例: ユーザー アクションでモデルを更新するためのイベント リスナーの設定)、b) 表示するビューを処理するルーター、および c) インデックス ファイルまたはその他の HTML / JS コード。

于 2012-07-31T00:44:49.210 に答える