web-dev-qa-db-ja.com

MVCはウェブにのみ適用されますか

モデルビューコントローラー([〜#〜] mvc [〜#〜])について開発者に話しかけると、ほぼ瞬時に、サーバーがエンティティ(モデル)を構築し、そのモデルの視覚的表現を提供するURLへの要求。

  • これは、MVCがWeb専用であることを意味しますか、それともWebアプリケーションを作成するためにMVCを使用する開発者だけの人に会ったことがありますか?

  • デスクトップスタイルのアプリケーションでMVCの使用法はありますか?

  • 私はパラダイムに不慣れで、MVCのスーパーセットについて知りたい

14
Deeptechtons

MVCはパターンです。パターンはすべてのプログラミングに適用されます。 MVCはたまたまWebコンテキストで非常にうまく機能します。

gnatが指摘 のように、mvcタグを確認すると、実装されている複数の例が表示されます。

22
Tom Squires

MVCは1977年からであり、Webは1991年に発明されただけなので、MVCはnotがWeb専用であることは明らかです。

45
Jörg W Mittag

いいえ、OS XおよびiOSの開発ではModel View Controllerパターンを使用します。

9
Holli

Microsoft環境で質問すると、多くの人は、あなたがAsp.Net MVCを意味していると思います。これは、Web専用のMVC実装です。

残念ながら、これがMVCパターンの実装であることを理解しておらず、それらが交換可能な用語であると考えている人も多く、これは「Webのみ」の仮定につながります。

8
ozz

少なくとも私の知る限りでは、MVCの最初の実装はSmalltalkでした。それは間違いなくSmalltalk-80に存在していました。それを証明するのに便利なドキュメントはありませんが、それ(またはとにかく非常によく似たもの)はSmalltalkに数年前から存在していたと思います。

ほとんどのOO GUIフレームワークには、MVCのバリアントが少なくともいくつか含まれています。ただし、この場合の「スーパーセット」が何を意味するのか正確にはわかりません。バリアントはMVCのスーパーセット、サブセット、またはピアですが、私はそれらのほとんどをピアと見なす傾向があります。

いずれにせよ、これらの多く(ほとんど?)は、Web開発ではなくデスクトップ開発に使用されています。いくつかの古いAT&T特許のおかげで、ほとんどのウィンドウシステムでは、要求に応じてビューを再生成できるプログラムが必要です。これにより、(ほとんど)現在の状態を維持するコード(モデル)とその状態を表示するコード(ビュー)が少なくともある程度分離されます。それでも、1)コントローラーの機能が分離されている程度、および2)各主要部分の間に線を引く場所の正確な詳細については、変更の余地がたくさんあります。

2
Jerry Coffin

知っておくべきことの1つは、MVCの実装を主張するフレームワークの数と同じ数のMVCの種類があることです。

ほとんどの人は、モデルがいくつかの状態を保持し、ビューがそれをレンダリングするという事実に同意します。しかし、コントローラーには非常に異なる役割があります。

Smalltalkでは、最初に説明されたように、モデルはアプリケーション、データ、およびビジネスメソッドの中核です。ビューはアプリケーションの状態(別名モデル)のグラフィカル表現であり、コントローラーはユーザー入力、マウス、キーボードイベントを管理します。たとえば、コントローラーはキーボードイベントをフォーカスのあるビュー要素にルーティングします。

.jspページでは、モデルはほとんどがデータであり、ビューはそのモデルをHTMLにレンダリングし、コントローラーはモデルを適切なビューにルーティングしてレンダリングします。

したがって、質問に答えるために、MVCはスタンドアロンアプリケーション(Java、.Net、Flex)とWeb(jspページ)の両方で使用されますが、まったく異なるものです。つまり、あなたが知っているMVCはスタンドアロンアプリケーションでは使用されません。

1
Florian F

いいえ、スタンドアロンアプリケーションにも適用されます。例Java SwingはMVCに従います。

1
Seshagiri T.V.

したがって、この領域にはさまざまなデザインパターンがたくさんあります。

  • モデルビュープレゼンター(mvp)
  • モデルビュービュープレゼンター(mvvp)
  • モデルビューコントローラー
  • モデル2

等々。長年にわたり、これらは絡み合い、つぶされ、変更され、さまざまな状況で適用されてきました。ここで重要な点は、1977年のMVC設計パターンが大幅に変更され、サーバーサイドのWebフレームワークで使用される設計パターンではなくなったことです。元のSmalltalk実装の例として、モデルは変更のビューを監視しますが、サーバーサイドはユーザーのブラウザーでhtml要素を監視できないため、これは当てはまりません。代わりに、ビューが変更されると、ビューはコントローラーにリクエストを送信し、コントローラーはビューを更新します。モデルを更新すると、モデルに依存するすべてのビューが更新されることになるため、元のMVC実装には従いません。

最新のWebフレームワークは、モデル2アーキテクチャとも呼ばれる単純な3層アーキテクチャに従います。

もちろんWeb上に実際のMVCアーキテクチャの例がありますが、ビューはxmlとjsonであり、変更が観察されないため、モデル2アーキテクチャに従うサーバーに接続されていることが多く、クライアント側のみです。クライアント側の純粋なmvcアーキテクチャの例は、Sencha TouchとSproutcoreです。

ブラウザーにMVCがあり、サーバーにmvcがあり、データレイヤーとしてmvcがある場合、階層的なmvc実装があります。

注意。 Webフレームワーク、MVCの他の実装(Java swingなど)とFlexには他の実装の違いがあります。

1
Kjaer