web-dev-qa-db-ja.com

MVC for web以外のデザインパターンはありますか?

MVC以外にWebのデザインパターンはありますか?

レジストリ、オブザーバー、ファクトリー、アクティブレコードなどのデザインパターンがあり、MVCには他のデザインパターンとフォルダー構造のセットがあります。

MVCが他のデザインパターンのセットであるようなデザインパターンはありますか?

編集:私のプログラミング言語はPHPです。

15
Saeed M.

ソフトウェア開発にはさまざまなパターンがあります。 MVP、MVVM、MVCなどはよく知られたものの一部です。ただし、解決または使用する予定の特定の問題またはテクノロジーを定義する必要があります。

enter image description here

これらの各パターンは、特定の一連の問題を解決するのに適しています。たとえば、 MVP(モデルビュープレゼンター)パターン は、ASP.NET Webフォームの開発で問題の分離を導入するのに役立ちます。これは、Webページからデータを収集、表示、および格納する責任を、Modelオブジェクト、Viewオブジェクト、およびPresenterオブジェクトの個別のオブジェクトに分割することで構成されます。

最も有名なデザインパターンの一般的なクックブックは、Gang of Four(GoF)デザインパターンです。

enter image description here

編集:.NETプラットフォームにデザインパターンを実装することに関心があると思います

25
Yusubov

数週間前に出会った素敵なパターンは [〜#〜] move [〜#〜] です。 。 MVCのように少し洗練されているように見えますが、同じ原理に基づいています。 MVCの欠点の1つは、コントローラーが非常に大きくなることです。 MOVEパターンを使用して、この問題を少し処理します。

他の人によって名付けられた他のパターンも良い代替案です。

7
Jan_V

最初に確立することは、フレームワークやMVC(またはその他の設計パターン)が有益であるかどうかを判断するために正確に行う必要があることです。

フレームワークは、一般的なプログラミング要件(データベースの相互作用、フォームの作成と検証、ユーザー認証など)に対するソリューションを通常提供しながら、開発のための一貫したプラットフォームを提供するためにあります。

PHP少なくとも [〜#〜] mvc [〜#〜] / [〜#〜] hmvc [〜#〜] =設計パターンは利用可能な主流のフレームワークを支配する傾向があります(例 ZendCakePHPCodeIgniter など))が、多くの異なる設計パターンがあります1つ使用できます。

MVCは、データモデリングと処理ロジックをビュー/プレゼンテーションレイヤー(堅牢でスケーラブルなアプリケーションを作成するために望ましいと考えられるもの)から分離する確立された方法を提供するため、非常に人気があります。

注意することは重要です(および@Marjan Venemaが@ElYusubovの回答へのコメントで述べたように)そのMVC、MVP、MVVMおよびその他のMVxパターンは、(原則として)すべて同じ「設計パターン」です。

通常、異なるデザインパターンはすべて(しばしば微妙に)異なる目的に役立ち、特定の言語を念頭に置いて開発されたケースもあります。ただし、真の「設計パターン」はプログラミングにとって厳格な規則ではなく、プログラムの実装と設計の要件および論理機能についての哲学的/考え論的理解のより多くのものです。

リサーチは、さまざまなプログラミングプリンシパルとベストプラクティスについて知るための最良の方法です。以下に、ウィキペディアのリンクをいくつか紹介します。

実際には、独自の「パターン」の実装を妨げるものは何もありません。IMOを実行することで学習するのが最善の方法です。少なくとも、私はそれを使用してWebサイトの作成を開始するまで、MVCパターンを完全に理解していませんでした。

プログラミングの概念とベストプラクティスをいくつか理解したら、それらを使用して独自のシステムを構築し、確立された「パターン」に準拠しているかどうかにかかわらず、直面している特定の問題を解決し、ニーズを満たすことができます。

解決する特定の一連の問題がない場合は、一般的なフレームワークの1つを学ぶことが最善の策です。

4
Chris

最も有名な例の1つは Knockout.js であり、これは MVVM設計パターン を使用するJavaScriptフレームワークです。スタックオーバーフローについての素晴らしい記事があります MVCフレームワークBackbone.jsとKnockout.jsの比較

余談ですが、MVVM設計パターンは、PM Martin Fowlerの設計パターンの専門化としてMicrosoftから生まれました。MVVMは、WPFアプリケーションによって広く使用されています。

3
dodgy_coder

ElYusubovが指摘したように、比較的主流の例を探しているのであれば、ASP.Netフレームワークには長い間MVPおよびMVVMパターンがありました。 MVCとMVVMの主な違いの1つは、エンティティの更新方法です。 MVCは、Webアプリケーションの従来のステートレスまたはセミステートレスのアプローチに適しています。 ASP.Netフレームワークは、状態にフォームを埋め込んで(リクエストごとに復元できるようにする)、これを回避しようとしました。これにより、MVPおよびMVVMパターンがより意味をなすようになりました。

HTML5により、アプリケーションの状態の多くがクライアント上にあるため、アプリケーションはますますJavaScriptを多用するようになっています。これはMVVMフレームワークの復活につながる可能性があり、 Knockout JS がその一例です。

0
Daniel B

実際のパターンのほとんどはMVC、またはMVCのフレーバーです。結局のところ、データ(モデル)、表現(ビュー)、およびデータとの相互作用(コントローラー)を分割することは理にかなっています。 80年代に設立されたMVCを見てみると、それがWebフレームワークであることを意図していないことがわかります。したがって、私はそれがウェブではるかに重荷であることがわかりました。

他のよく知られたパターンは、サービス指向アーキテクチャー(SOA)です。その上に構築された最新のアプローチは、サーバー上にMVC(またはフレーバー)を置くことであり、操作できるサービスを公開するだけです。クライアント側には、他のMVCスタイルのアプリケーションがあります。たとえば、HTML5やJavaScriptを利用したWebアプリケーション(TwitterやLinked Inなど)です。クライアントアプリケーションは、サーバー側のサービス(サーバーの「ビュー」)をモデルとして使用します。私見、これは最先端の技術であり、おそらくサーバー側のみMVCを脇にプッシュします。

0
Bruno Schäpper

私は個人的には Resource Methods Representation のアイデアを使用して何かを実装することを検討していますが、この段階ではほとんどの場合、それは何よりも単なる実験です。 MVCよりもHTTP要求/応答をモデル化するという点で、いくつかの説得力のある点があります(これは、存続期間の短い要求/応答セッションではなく、単一のコンピューターで実行される存続期間の長いアプリケーション用です)。ただし、GET、POST、PUT、DELETEなどを処理するためにリソースにメソッドを配置すると、リソースがフロントエンドに結合されるという欠点があります。それを別のレイヤーに分離するつもりです。

0
GordonM

MVCを除いて1000以上の方法があります。それらの一部はMVCに類似しており、一部は完全に異なります

例えば ​​:

  1. モデルテンプレートビュー-MTV
  2. モデル–ビュー–プレゼンター-MVP
  3. 階層モデル–ビュー–コントローラーHMVC
  4. モデルビューViewModel- MVVM