34

大学を卒業し、SOの開発を進めているうちに、Model-View-Controllerのアーキテクチャ設計パターンについて多くのことを聞いたことがあります。私はそれが何であるかを知る前であっても、うっかりMVCパターンを使用していましたが、私の日常的な仕事でそれを使用しています。私が見たことから、おそらく今日もっとも人気のあるパターンです。私が聞いたことがないものは、MVCの代わりに使用できる代替パターンです。どのようなオプションがありますか?そしてMVCを上回る理由は何ですか?私は彼らが典型的なシステムの種類を知っていることにも興味があります。最後に、それらを使用することに沿って来る賛否両論は何ですか?Model-View-Controllerには何がありますか?

答えて

27
  1. パッシブビュー - http://martinfowler.com/eaaDev/PassiveScreen.html
  2. 管理コントローラー - http://martinfowler.com/eaaDev/SupervisingPresenter.html
  3. モデル - ビュー - プレゼンター - http://martinfowler.com/eaaDev/ModelViewPresenter.html

私の個人的なお気に入りはパッシブビューです。私はMVCを含めて見てきた他のものよりもテスト可能です。

+1

Model-View-ViewModel(-Controller)もあり、.NETの領域で人気が高まっています。 Viewに渡すViewModel(コントローラ内にあることが多い)を作成して、Viewのモデルの実装の詳細への依存を減らします。それは私の現在のお気に入りです。 –

+1

パッシブではありません(ほとんど)すべてのWebフレームワークが実装するものを表示しますか?モデルにAJAXポーリングを組み込んでビューを「通知」するという私の頭の上にあるフレームワークを考えることはできません。パッシブビューと3層の違いは何ですか? –

4

モデルのデータの変更をリッスンし、それに応じてレンダリングを変更し、モデルのメソッドがビューのイベントハンドラにバインドされているCがないMVCが見られることがあります。

(モデルのモデルや属性に直接関係するビジュアルコンポーネントがある場合など)ビューとデータが密接に関連している必要があるプロジェクトの場合、これは "ミドルマン。

これはまだMVCであり、ハイブリッド化されたバージョンであり、ビューとモデルの間に確立されたバインディングはコントローラロジックであると主張していると思います。

4

まあ、Model-View-Presenterがありますが、MVCの最も一般的な「代替」は実際​​には適切な分離がないことがわかります。極端な例として、HTML、VBScript、およびSQLが同じファイル内に並んでいる従来のASPページを考えてみましょう。 (ASPのbashではありません - 他の言語でもそう多くの例が見つかります)

4

上記の回答はかなり正しいですが、私は「デザインパターン」という言葉は完全にソフトウェアを作成するすべての人の90%に知られていません。彼らはコードを書くだけです。

挑戦は最高のデザインアプローチを選択することではなく、デザインに価値があることを他の人に説得しています。

1

素晴らしいではありません。基本的に、ビューは1つまたは複数のスニペット(コントローラと多少似ています)で構成され、スニペットはネストできます。これは、HTMLとScalaのビルトインXML処理機能と非常によく機能します。

5

MVCを含むいくつかの他のアーキテクチャパターン。

レイヤードシステムズ

TCP/IP

オブジェクト指向の組織

モデル - ビュー - コントローラプレゼンテーション・抽象化・制御モデルビュープレゼンターおよびモデルビューViewModel

例として、ASP.NETのMVC、Ruby on Railsなどがあります。

イベントベース、暗黙の呼び出し

ブラウザ環境(DOM)

パイプとフィルタアーキテクチャ

Unixのパイプ

リポジトリ

表ドリブン通訳


また、ソフトウェアアーキテクチャ上のGarlan &ショーによってthis paper素敵な読み取りを見つけることができます。

他の注目すべきリンクは、Wikipediaの建築パターンに関する記事です。

0

Observerパターンはどうですか。私が間違っていなければ、MVCはSmalltalkに導入され、その後いくつかのパブリッシュ/サブスクライブパターンが現れました。

オブザーバーパターン(パブリッシュ/サブスクライブパターンのサブセット)は、サブジェクトと呼ばれるオブジェクトがオブザーバーと呼ばれる従属物のリストを保持し、状態変化を自動的に通知するソフトウェア設計パターンです。通常はそのメソッドの1つを呼び出すことによって行われます。主に分散イベント処理システムの実装に使用されます。

例:保存するデータがある場合にのみ、編集ボタンで[保存]ボタンが有効になります。オブザーバーパターンのもう1つの例は、ドキュメントが変更されたときにビューが更新されるMFCのドキュメントビューアーキテクチャです。

+0

あなたに教えてください!このパターンのメリットは何ですか? –

関連する問題