MVCはWebにのみ適用されますか


14

Model View Controller(MVC)について開発者と話すと、サーバーがエンティティ(MODEL)を構築し、そのモデルの視覚的表現を提供するURLへのリクエストを行うと言うとき、それはほぼ瞬時です。

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

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

  • 私は、パラダイムが初めてであり、MVCのスーパーセットについて知りたい


1
あなたがチェックしたProgrammers.SEまたはスタックオーバーフロー タグがウィキ「MVC」のため?
-gnat

3
@gnatはい私はやった
-Deeptechtons

6
さて、あなたはおそらくあなたの質問への答えをすでに知っているでしょう?
-gnat

4
@gnat真剣にいいえ、私はMVCにまったく触れていません(述べたように)、MVCがWindowsアプリケーションに適用されたり、ダウンロードページでMVCバッジを表示するアプリケーションを使用したりしたことを聞いたことはありません(耳にしました)。質問が愚かだったら申し訳ありませんが、私にとってはパズルです
-Deeptechtons

MVCの歴史を学ぶための多くの優れたリソースがありますが、この誤解をよく見るので、ブログblog.kutulu.org/2012/01/mvc-mvp-mvvm-mvpvm-lmnop-wtfに
KutuluMike

回答:


22

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

以下のようブヨの点からだけでMVCのタグを見て、あなたはそれが実装されているの複数の例が表示されます。


5
これが重要です。MVCはWebアプリケーションで非常にうまく機能し、実際、最新のMVCベースのフレームワーク(Rails、Django、ASP.NET MVCなど)が非常に人気がある理由の大部分です。他のコンテキスト(デスクトップアプリなど)でも機能しますが、ビューとコントローラーをきれいに分離するのは難しいため、Model-delegator(Swingで使用)などのビューとコントローラーの分離を削除するバリアント、または分割の発生場所を変更するバリアントModel-View-ViewModel(主に.Net WPFアプリで使用)などは、デスクトップアプリケーションでより一般的です。
ケビンキャスカート

コントローラーの機能に関する元のSmalltalkの説明(ユーザー入力をモデルのメッセージに変換する)を見ると、Windows自体は基本的に1つの大きなコントローラーです。これが、パターンとしてのMVCがWindows UIアプリケーションとうまく適合しない理由です。Windows以外のシステムのUIフレームワークでより多く使用されました。
-KutuluMike

@MichaelEdenfieldそうではありません。MVCとWinFormsを一緒に使用できますが、そこではMVPがより一般的ですが、とにかくMVPはMVCのバリアントです。
アンディ14年

45

MVCは1977年からのものであり、ウェブは1991年にしか発明されていないことを考えると、MVCはウェブだけのものではないことは明らかです。


30
これは答えの良い出発点ですが、口の中に苦味があります。
ニコラスC.

2
正しい不機嫌。素晴らしいもの!
トムホーティン-タックライン

1
「1982年にインターネットプロトコルスイート(TCP / IP)が標準化され、インターネットと呼ばれる完全に相互接続されたTCP / IPネットワークの世界規模のネットワークの概念が導入されました。」ウィキ。もしあなたがネットスケープを意味するなら、それでは大丈夫...しかし「ウェブ」はその前に存在していました。
jmq

4
@jmquigley「インターネット」と「Web」は、2つの非常に異なるものです。
エリックキング

1
しかし、@ jmq 1977は1982年以前でもまだあり、誰かがWeb!= Internetを指摘したように。ウェブは本当に1991
Andy 14年

9

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


2
最後に、解説なしの1番目と2番目のポイントに対する回答。
-JeffO

8

マイクロソフト環境で質問すると、多くの人は、Web専用のMVC実装であるAsp.Net MVCを意味すると想定します。

残念ながら、これがMVCパターンの実装であることに気づかず、それらが交換可能な用語であると考え、「ウェブのみ」という仮定につながる多くの人々がいます。


3
+1これは、方法論に基づいてプラットフォームに名前を付ける際の問題です。人々が最初にプラットフォームに導入されるとき、彼らは区別を見失います。
MattDavey

この@Ozz MVCが話題であるとき、他の開発者は、常にウェブについて言うために使用する理由を説明しました
Deeptechtons

1
おかげで、マイクロソフトの開発者を愚か者として描くのをやめてください。
アンディ14年

@アンディ-それはMS開発者のバッシングではなく、私自身はAsp.Net MVC開発者であり、私は元の答えを待っています。「すべて」の人、または「すべて」の.net開発者とは言いませんでした。多くの人が見た仮定や間違いを観察しただけです。ありがとう。
ozz 14年

2

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

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

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


1

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


1
なぜ投票者が生きるのかを決める!
Deeptechtons

1

そのため、この領域にはさまざまなデザインパターンがあります。

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

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

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

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

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

注意。Webフレームワークについてのみ説明しましたが、java swingやFlexなど、MVCの他の実装には他の実装の違いがあります。


なぜ人々が他の人に反対票を投じるのかは理にかなっていない。何かが間違っているなら、彼らに伝えて、自分の意見を修正する機会を与えてください。彼らが主題についての知識を持っていない場合、良い教師は彼がそれを正しく学ぶまで彼を打ち負かさないで正しいソースに彼らを向けるでしょう!
Deeptechtons

質問は、mvcとwebがうまく機能し、web以外のmvcに対して嘆願することを前提としているため、webコンテキストでmvcの例を指定する場合のみ:-1
hildred

1

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.