MVCは設計パターンまたはアーキテクチャパターンですか


109

SunMsdnによると、これはデザインパターンです。

ウィキペディアによると、それは建築パターンです

設計パターンと比較すると、建築パターンは規模が大きくなります。(ウィキペディア- 建築パターン

それとも、デザインパターンもある建築パターンですか?

どちらが本当ですか?


1
一つの真の回答...がなければならないために
マイク・G

Dave at Product Madnessによれば、MVCはデザインパターンであり、RobotLegsもそうです。:P
andygoestohollywood

回答:


56

MVCはよりアーキテクチャー的なパターンですが、完全なアプリケーションではありません。MVCは主にアプリケーションのUI /インタラクションレイヤーに関連しています。あなたはまだビジネスロジック層、おそらくいくつかのサービス層とデータアクセス層を必要としています。つまり、n層アプローチの場合です。


16
ええ、MVCはプレゼンテーション層のアーキテクチャパターンだと思います。
murki 2010

8
「MVCは主にアプリケーションのUI /インタラクションレイヤーに関連している」という意見には強く反対します。MVCでの「M」/モデルであるあなたは、おそらく複数の層に分割したいと思い、ビジネス層、。
mewm 2015

はい、この答えは間違っています。MVCは、UI /インタラクションについては絶対に重要ではありません。フロントエンド側とバックエンド側に完全にmvcを設定できます。最初のビューでは、多くの場合、html / jsまたは.jspまたは.phtmlだけで、サーバーがコントローラーとモデルを定義します。例:JSP(ビュー)、JavaBeans(モデル)、サーブレット(コントローラ)。すべての有名なphpフレームワーク(symphony、zend、cakeなど)と同じコンセプト。しかし、現在のフロントエンドフレームワークはバックエンドアプリケーションのように見え、最新のJavaScriptフレームワークはmvcを使用します(htmlビュー、コントローラ、スクリプト、jsオブジェクトをエンティティとしてモデル化)
amdev

40

なぜそれらの1つが真実でなければならないのですか?

見方によっては、どちらも当てはまる場合があります。

MVCがアプリケーションアーキテクチャの基礎を形成する場合、MVCはアーキテクチャパターンになる可能性があります。

また、これは単なるデザインパターン、つまりあらゆるアプリケーションに適用可能な抽象的な概念と見なすこともできます。


27

デザインパターンは、コードの効率的な記述方法を示します(コードメトリックを考慮)。

いくつかの利点:

  1. メンテナンスが簡単
  2. 高い再利用性
  3. 抽象化のため読みやすい

建築パターンは、リソースを効果的に利用する方法を示しています。

  1. プログラマーやグラフィックデザイナのような並列タスクの実行は、並列で実行できます。
  2. 複数のテクノロジーを利用してソフトウェアを構築できます。

MVCでは、 a)。ビューは、JavaScriptテンプレートを使用して作成でき、HTMLも使用できます b)。コントローラーは.NETフレームワークとc)で作成できます モデルはJavaで作成できます。jsonデータのみを返すJavaサービスを使用できます。

デザインパターンでは、JavaのAdminUserクラス、C#のCustomerクラス、PhpのPartnersクラス、Rubyのファクトリーパターンなど、複数のテクノロジーでコードを記述できるパターン実装することはできません。hmmm ..とても簡単?:)


6

私はそれが少し前に回答されたことを知っていますが、MVCを有名にしたこの本に言及した人はまだいません。 GammaらによるPOSAは、パターンコミュニティで使用されている基礎的な書籍の1つです。

ああ、そしてPOSAはMVCをアーキテクチャパターンとして非常に明確に識別しています。私の直感は、MSとSunはだらしがなく、すべてのパターンを「設計パターン」と呼んでいることです。


3

どちらも正しいと思います。Ruby on RailsのようなフレームワークでMVCの特定のインスタンス化を見る場合、そのインスタンス化は設計パターンに近いものです。MVCを一般的な概念として見ると、それはよりアーキテクチャパターンです。


3

クラスのモデル/ビュー/コントローラー(MVC)トライアド内の設計パターンには、次のものが含まれ、これらに限定されない場合があります。

  • オブジェクト(モデル)が他の(ビュー)の詳細を知る必要なく、1つ(モデル)への変更が他の任意の数(ビュー)に影響を与えることができるようにオブジェクトを分離するオブザーバー

  • Composite。グループオブジェクト(複合ビュー)を、個別のオブジェクト(ビューコンポーネント)の1つと同じように扱うことができます。

  • Strategy、ビューはControllerサブクラスのインスタンスを使用して特定の応答戦略を実装します。別の戦略を実装するには、インスタンスを別の種類のコントローラーに置き換えるだけです。

  • ビューのデフォルトのコントローラクラスを指定するファクトリメソッド

  • ビューにスクロールを追加するデコレータ


参照

  • 4〜6ページ(セクション1.2 Smalltalk MVCの設計パターン)
  • 293〜304ページ(オブザーバーデザインパターン)
  • 163〜174ページ(複合デザインパターン)
  • 315〜324ページ(戦略デザインパターン)
  • 107〜116ページ(ファクトリーメソッド設計パターン)
  • 175〜185ページ(デコレーターデザインパターン)

エリックガンマ、リチャードヘルム、ラルフジョンソン、ジョンヴリサイドズ。設計パターン:再利用可能なオブジェクト指向ソフトウェアの要素。Addison-Wesley、レディング、MA、1994。


1
ありがとう、他のすべての答えは間違っています。それは絶対に「視点に依存する」ことではなく、数十または数百の投票があっても何かが間違っていることはありません。MVCはそれ自体がデザインパターンではなく、あなたが言及するいくつかのデザインパターンを使用して3層でコードを構築する方法です。舞台裏でMVCを実装するすべてのフレームワークは、観察可能、戦略、および複合パターンの概念を使用します。MVCを理解する最善の方法は、独自の実装を作成することです。そうすれば、背後にある設計パターンを理解できます。
amdev

2

MVCは、ソフトウェアアーキテクチャブックのプレゼンテーション層として常に言及および紹介されています。

これらの本を読んでください:

  1. 企業向けのMicrosoft.NETソリューションの設計(Microsoftプレス)

  2. プロフェッショナルASP.NETデザインパターン(Wrox)

  3. Microsoft.NETを使用したエンタープライズソリューションパターン(Microsoft Press)

  4. エンタープライズアプリケーションアーキテクチャのパターン(Addison Wesley)

  5. エンタープライズアーキテクチャの実践ガイド(Prentice Hall)


6
なぜ2つの答えですか?この回答を最初の回答に追加のメモとして追加できます
frogatto

2

10人のソフトウェアアーキテクトを部屋に入れて、モデルビューコントローラーパターンとは何かについて話し合うと、12の異なる意見になってしまいます。…そこにいる純粋主義者の何人かは、必然的に私が「MVC」と呼んでいるものと同じ感覚を持ちます。このWebページの下部にあるメッセージボードに炎のようなコメントを残してください。私はMVCの意味についてさまざまな見方を喜んで受け入れますが、気にしないことを覚えておいてください。

ジョシュ・スミス


1

そして、Martin Fowlerによると、それらはGUIアーキテクチャです:Martin Fowler-GUIアーキテクチャ

GUIに関連するクラスにのみ影響を与えるため、アプリケーションのサイズに依存します。小さいもの(主にGUI)ではアーキテクチャパターンと見なすことができますが、大きいものではGUIに適用するデザインパターンにすぎません。コード(アプリのコードの10%になる可能性があります)。


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