大学を卒業し、SOの開発を進めているうちに、Model-View-Controllerのアーキテクチャ設計パターンについて多くのことを聞いたことがあります。私はそれが何であるかを知る前であっても、うっかりMVCパターンを使用していましたが、私の日常的な仕事でそれを使用しています。私が見たことから、おそらく今日もっとも人気のあるパターンです。私が聞いたことがないものは、MVCの代わりに使用できる代替パターンです。どのようなオプションがありますか?そしてMVCを上回る理由は何ですか?私は彼らが典型的なシステムの種類を知っていることにも興味があります。最後に、それらを使用することに沿って来る賛否両論は何ですか?Model-View-Controllerには何がありますか?
答えて
- パッシブビュー - http://martinfowler.com/eaaDev/PassiveScreen.html
- 管理コントローラー - http://martinfowler.com/eaaDev/SupervisingPresenter.html
- モデル - ビュー - プレゼンター - http://martinfowler.com/eaaDev/ModelViewPresenter.html
私の個人的なお気に入りはパッシブビューです。私はMVCを含めて見てきた他のものよりもテスト可能です。
モデルのデータの変更をリッスンし、それに応じてレンダリングを変更し、モデルのメソッドがビューのイベントハンドラにバインドされているCがないMVCが見られることがあります。
(モデルのモデルや属性に直接関係するビジュアルコンポーネントがある場合など)ビューとデータが密接に関連している必要があるプロジェクトの場合、これは "ミドルマン。
これはまだMVCであり、ハイブリッド化されたバージョンであり、ビューとモデルの間に確立されたバインディングはコントローラロジックであると主張していると思います。
まあ、Model-View-Presenterがありますが、MVCの最も一般的な「代替」は実際には適切な分離がないことがわかります。極端な例として、HTML、VBScript、およびSQLが同じファイル内に並んでいる従来のASPページを考えてみましょう。 (ASPのbashではありません - 他の言語でもそう多くの例が見つかります)
上記の回答はかなり正しいですが、私は「デザインパターン」という言葉は完全にソフトウェアを作成するすべての人の90%に知られていません。彼らはコードを書くだけです。
挑戦は最高のデザインアプローチを選択することではなく、デザインに価値があることを他の人に説得しています。
現在のASP.NETフレームワークで独自のMVCをロールバックし、ポストバックモデルを保持することができます。
http://www.codeproject.com/KB/aspnet/RollingYourOwnMVCwithASP.aspx
インタフェース/相互作用は薬剤の階層によって処理されるパターンのプレゼンテーション抽象-制御(PAC)ファミリー。
Wikipediaの記事は、私たちがView Firstアプローチを使用Lift Webフレームワークでは http://en.m.wikipedia.org/wiki/Presentation-abstraction-control
素晴らしいではありません。基本的に、ビューは1つまたは複数のスニペット(コントローラと多少似ています)で構成され、スニペットはネストできます。これは、HTMLとScalaのビルトインXML処理機能と非常によく機能します。
MVCを含むいくつかの他のアーキテクチャパターン。
レイヤードシステムズ
TCP/IP
オブジェクト指向の組織
モデル - ビュー - コントローラ、プレゼンテーション・抽象化・制御、モデルビュープレゼンターおよびモデルビューViewModel。
例として、ASP.NETのMVC、Ruby on Railsなどがあります。
イベントベース、暗黙の呼び出し
ブラウザ環境(DOM)
パイプとフィルタアーキテクチャ
Unixのパイプ
リポジトリ
表ドリブン通訳
また、ソフトウェアアーキテクチャ上のGarlan &ショーによってthis paper素敵な読み取りを見つけることができます。
他の注目すべきリンクは、Wikipediaの建築パターンに関する記事です。
これはかなり古いです。私は(追加の知識のための情報の関心で)1以上に言及したいと思います。ここ
PresenterFirstのpatrernで同じの詳細は次のとおりです。
http://en.wikipedia.org/wiki/Presenter_First
http://www.atomicobject.com/pages/Presenter+First
はHTH
Observerパターンはどうですか。私が間違っていなければ、MVCはSmalltalkに導入され、その後いくつかのパブリッシュ/サブスクライブパターンが現れました。
オブザーバーパターン(パブリッシュ/サブスクライブパターンのサブセット)は、サブジェクトと呼ばれるオブジェクトがオブザーバーと呼ばれる従属物のリストを保持し、状態変化を自動的に通知するソフトウェア設計パターンです。通常はそのメソッドの1つを呼び出すことによって行われます。主に分散イベント処理システムの実装に使用されます。
例:保存するデータがある場合にのみ、編集ボタンで[保存]ボタンが有効になります。オブザーバーパターンのもう1つの例は、ドキュメントが変更されたときにビューが更新されるMFCのドキュメントビューアーキテクチャです。
あなたに教えてください!このパターンのメリットは何ですか? –
- 1. PHPには何がありますか?
- 2. Facebookには何がありますか?
- 3. PHPには何がありますか?
- 4. メソッドシグネチャには何がありますか
- 5. Pythonにはモジュールがありますが、C++には何がありますか?
- 6. JSフレームワークは何がありますか?
- 7. 何がSystem.out.println()にありますか
- 8. Mono.CSharp.dllに問題がありますか何かがありません
- 9. SEAMには何らかの欠点がありますか?
- 10. Collections.unmodifiableListには何らかのパフォーマンスリスクがありますか?
- 11. Zendには何らかの音訳がありますか?
- 12. モンゴイドはスケーリングに何か問題がありますか?
- 13. slideToggleには何らかのバグがありますか?
- 14. サーブレットコンテキストよりも上位に何かがありますか
- 15. MVCアーキテクチャモデルには何がありますか?
- 16. Golangテンプレート:コンテキストには何がありますか?
- 17. ターゲットディレクトリには何を入れる必要がありますか?
- 18. この単純なjqueryには何がありますか?
- 19. シンボリックリンクの背後には何がありますか?
- 20. AJAXクロスドメインセキュリティの背景には何がありますか?
- 21. GoogleのAPIには何の制限がありますか?
- 22. このコードには何がありますか?
- 23. C#アセンブリ、アセンブリ内には何がありますか?
- 24. Eclipse Galileoの後には何がありますか?
- 25. EJBの前には何がありますか?
- 26. には何か同等のgetChildViewByIDがあります。
- 27. このSQLには何がありますか?
- 28. $( 'elem'、elem)のコンマの後には何がありますか?
- 29. 基本C++の後には何がありますか?
- 30. GUIDのデザインの背景には何がありますか?
Model-View-ViewModel(-Controller)もあり、.NETの領域で人気が高まっています。 Viewに渡すViewModel(コントローラ内にあることが多い)を作成して、Viewのモデルの実装の詳細への依存を減らします。それは私の現在のお気に入りです。 –
パッシブではありません(ほとんど)すべてのWebフレームワークが実装するものを表示しますか?モデルにAJAXポーリングを組み込んでビューを「通知」するという私の頭の上にあるフレームワークを考えることはできません。パッシブビューと3層の違いは何ですか? –