2016-04-03 8 views
1

私はプレゼンテーションモデルのパターンを習得しようとしていますが、私はプレゼンテーションモデルとMVPパッシブビューの違いを混乱させています。具体的には、プレゼンテーションモデルがビューの代わりに同期を行う場合です。この問題は、この件に関してprevious questionへの拡張です。プレゼンテーションモデルとMVP(パッシブビュー)

Martin Fowlerは、プレゼンテーションモデルが彼のArticleで同期している可能性を示しています。

ビューを参照するプレゼンテーションモデルは、一般的にプレゼンテーションモデルで同期コードを維持します。結果として得られるビューは非常に愚かです。このビューには、動的で、ユーザーの操作に応じてイベントを発生させる任意の状態のセッターが含まれます。このビューは、プレゼンテーションモデルをテストする際に簡単にスタブするためのインターフェイスを実装しています。プレゼンテーションモデルは、適切な状態を変更し、ビュー全体をリロードすることによって、ビューを観察し、イベントに応答します。その結果、実際のUIクラスを必要とせずに同期コードを簡単にテストすることができます。

プレゼンテーションモデルが同期している場合、MVP(パッシブビュー)とはどのように違うのか完全に理解していません。彼のarticle about Passive Viewは、同期を使用してビューを更新する例を示しています。

プレゼンテーションモデルがビュー(および同期)を参照するプレゼンテーションモデルパターンは、MVP(パッシブビュー)と同じではありませんか?

+0

私はプレゼンテーションモデルパターンは、パターンのMVVMグループではなく、MVPグループの一部であると思います。さらに、このパターンをWPFのようなバインディングを広範に使用するフレームワークで使用すると、MVPとの違いが少し明確になります。 –

+0

@DavidOsborne Martin Fowlerによれば、それらは異なるパターンです。私はそれについて論争していない。しかし、プレゼンテーションモデルと(ビューとは対照的に)プレゼンテーションモデルとパッシブビューでの同期では、プレゼンテーションモデルに違いはありません。パッシブビューを使用して小規模なアプリケーションを作成し、プレゼンテーションモデルで同期してプレゼンテーションモデルを使用するように教えてもらえれば、私は同じ方法で書くでしょう... –

+0

あなたはプレゼンターではありませんパッシブビューでは、ビューを操作する多くのコードが含まれていました。 MVVM View Modelでは、ビューモデルによって公開されるデータとビヘイビアにビューがバインドされるため、この種のコードはありません。 –

答えて

-1

Model-View-Presenterは、UIレベルでの動作とロジックの構造を定義するアーキテクチャパターンです。 M-V-Pは、バックエンドサービスとビジネスレイヤーとのやりとりなど、プレゼンテーションのロジックをボタンやインターフェイスコンポーネントを表示する仕組みから分離します。

パッシブビューは、Model-View-Presenterパターンのサブセットです。私たちは、その後、インタフェースからデータを収集し、おそらくいくつかのビジネスやデータ検証を行う、と考えフラットアーキテクチャで

UI – The User Interface reflects what is going on beneath it by implementing one or more View interfaces 
Presenter – The Presenter receives interactions from the UI or Model and updates the Views it is attached to 
Model – The model is a facade or black box in our diagram, behind which is a business logic layer and data layer 

:外部から Basic Model view presenter diagram

は、パッシブ表示のためのアーキテクチャは、次のようになりますストアドプロシージャまたはインラインSQLを使用してデータベースに直接保存します。データアクセスレイヤー(またはエンティティーフレームワークのようなデータモデル)を定義することで、アプリケーションは、アプリケーションにとって意味があり、一貫して格納および取得される、まとまった定義済みのオブジェクトに対して操作することができます。ビジネスロジックレイヤーを定義することで、ビジネスと一貫性があり、アプリケーション内で一貫した方法でアプリケーション内のエンティティを操作するビジネスルールを集中化し、ビジネスフローを変更する際に発生するリスクを最小限に抑えることができます。エンドユーザーに伝達される情報とその入力に対する概念的な応答から、入力を投入し、UI上のボタン押下に応答するロジックを分離することにより、システムは、同一アプリケーション内の任意の数のインターフェースにわたってユーザーと一貫して対話することができる。

私のサンプルアプリケーションは、いくつかの機能と非機能要件があります。

Functional – Display product number, name, list price, and available quantity in tabular format 
Functional – Provide a basic search input and button to search product names 
Non-Functional – Implement an M-V-P pattern – Obviously the purpose of this whole exercise 
Non-Functional – Use a simple model stack that can be easily replaced with a Service-Oriented one at a later time 
Non-Functional – Build with the idea that we will later create a Silverlight or WPF front-end 
Non-Functional – Make pretty pictures for article