GWT MVP 全体とアクティビティと場所に関する混乱
-
27-10-2019 - |
質問
しばらく本を読んだり、Google IO のビデオを見たりした後でも、MVP がアクティビティとプレイスにどのように関係するのかまだ混乱しています。
しばらく前に投稿されたスレッドを見つけました -->GWT 2.2 MVP vs.GWT 2.1 アクティビティ - 場所
「MVP アーキテクチャ。MVP がコンセプトであり、それを実現する方法の 1 つが場所とアクティビティのフレームワークです。」
「プレゼンターはアクティビティに似ている」とも聞きます。
「MVPのない活動や場所」をあげることができます
「MVP のあるアクティビティと場所」を組み合わせることができます
「MVP とは、コードを簡単にテストして整理できるようにプロジェクトを整理する方法に他なりません。」
それから私はこのようなことを理解しようとしています --> http://code.google.com/p/gwt-platform/
本当に混乱しています。すべての混乱を終わらせるためにワンストップのスレッドが欲しいと思っています。
解決
TL;DR:場所やアクティビティは MVP とはまったく関係ありません。
Places はアプリに移動することです。あなたはある場所から別の場所へ行きます。また、アクティビティはプレイスの上に構築され、「見ているもの」と「いる場所」を結び付けるのに役立ちます。
- SO のホームページにいるとき、メイン部分にはすべてのトピックの質問のリストが表示され、右側の上部にはお気に入りのタグが表示され、タグ フィルターのセットアップに役立ちます。その下に追加が表示され、その下に追加が表示されます。は最近のタグのリスト、次に最近のバッジのリストです。
- この質問ページでは、メイン部分に質問とその回答が表示され、右側の上部が質問のタグの情報に置き換えられ、その後に追加、リンクされた質問、そして関連する質問が続きます。
それぞれの「部分」(リージョン)を管理するのは、 ActivityManager
聞く人 PlaceChangeEvent
そして彼らの関係者に尋ねます ActivityMapper
どれの Activity
その地域で表示します。
すべてはナビゲーションに関するものです。
MVP とは何の関係もありません (公式ドキュメントには何と記載されていますが)。ただし、MVP を使用する場合は、アクティビティを「プレゼンター」にして、「ビュー」 (アクティビティがビューに返すビュー) を制御することになるでしょう。 AcceptsOneWidget
の議論で受け取った start
方法)。ただし、これは規則ではありません。たとえば、Google は 実験中, 、mobilewebapp サンプルでは、アクティビティとプレゼンターが分離されています。
他のヒント
MVP を意味する モデル, 意見, プレゼンター, 、それはコーディングパターンです。それはからの進化です MVC (モデル, 意見, コントローラ) パターン。見る MVCウィキペディアページ.
MVPとMVCの違いは、MVPでは、モデルとビューがお互いを知らないことです。 MVPでは、あなたのビューはできるだけ愚かでなければなりません。すべてのインタラクションは、プレゼンターによって処理されます。これは、コードを適切に整理する方法です。
一部の人々は、この方法でコードを整理するために行うべき仕事の量を減らすためのフレームワークを作成しました。さまざまなmvpimplementationsをご覧ください。ウェブ上でそれらを見つけるのは簡単です。
MVPは、動作やビューを偽造する他の実装(通常は模擬)にビューを簡単に置き換えることができるため、コードをテストしやすくします。したがって、ブラウザ環境でテストを実行する必要はありません(GWTビューはHTMLビューです)。したがって、テストはより速く実行されます。
Googleドキュメントによると:
アクティビティと場所のフレームワークを使用すると、アプリケーション内でブックマーク可能なURLを作成できます。
したがって、アクティビティと場所は、単なるMVPフレームワーク以上のものです。それにもかかわらず アクティビティ aです プレゼンター.
public interface Activity {
String mayStop();
void onCancel();
void onStop();
void start(AcceptsOneWidget panel, EventBus eventBus);
}
使用せずにプレゼンターにアクティビティインターフェイスを使用できます 場所 Googleの他のオブジェクト。しかし、その場合、アクティビティの開始と停止を担当する独自のアクティビティマネージャーのようなものをコーディングする必要があります。開始と停止では、おそらくビューを作成し、DOMに追加し、イベントハンドラーを登録するなどを行います。
他のMVP実装では、同じ役割を持つbind()およびunbind()メソッドを見つけることができます。
Googleからのアクティビティプレイスの実装のパワーは、背後にあるすべてのオブジェクトから来ています 場所 アクティビティを開始または停止させ、履歴を処理するオブジェクト。
場所 上記の他の人があなたのURLの単なる表現です。
Googleからのアクティビティプレイスの実装には多くのオブジェクトが関与しています。ここにあなたが理解するのに役立つスキーマがあります。アクティビティは全体のほんの一部にすぎないことがわかります。 この記事では、私のブログでさらに詳細を見つけることができます
アクティビティはプレゼンターです。場所は、歴史トークンの単なるラッパーです。
混乱はGoogle IOビデオで始まり、MVP GWTコンセプトが導入されましたが、実装は行われませんでした。だから人々は自分のものを転がし始めました。次に、Googleは2.1ドキュメントを書き、そこでコンセプトを詳述し、ダウンロードするコードの例のみを提供しました。 2.2の後半で、彼らは完全な実装を導入しました、Activity et al。
したがって、MVPルートにアクセスしたい場合は、実装を選択する必要があります。それは公式のものであるため、おそらく活動が最善でしょう。
それらを2つの開発パターンと考えている限り、それらを分離するのは非常に簡単です。 MVPは懸念や活動を分離するためのパターンであり、場所はURLと履歴管理のためのツールです。
混乱を解消するのに役立つ良い記事があります、 MVP、活動と場所の混乱
2つの独立した寸法デザインパターンがあります - パターンなし-MVP
ナビゲーションとスクリーントラバーサル - ナビゲーションなし - アクティビティと場所
次のいずれかに従うことができるアプリケーションがある場合があります
- MVPもアクティビティも場所もありません
- MVPのみ
- アクティビティと場所のみ
- アクティビティと場所を備えたMVP