MVPすなわち古典からモデル-ビュー-プレゼンター、MVCは、彼らの基本的な考え方を進化させ、共通の場所にあります。ロジックを担当するコントローラ/プレゼンターを取り扱い、モデルビューが表示するための責任がある、データを提供します。
まず、構造
MVPでは、ビューは直接モデルと通信していないが、間接的にすなわちプレゼンター、通過するすべての相互作用が改善するために、プレゼンターの内部で行われます。
1 2 3 4 5 6
|
空ビュー::にonKeyDown()オーバーライド { STD :: COUT << "表示:mpModel->のgetData()<100?" << STD :: てendl ; IF(mpModel->のgetData()< 100) mpController-> increaseData(); }
|
違いはつまり、MVCは非常に実装するために、MVPはMVP柔軟性MVCよりもはるかに大きい特定のページ、(すべてのビジネス・コードとしてプレゼンターに配置されている)であり、システムレベルのアーキテクチャでありますシンプル。
第二に、長所と短所
利点
- モデルとビューの完全な分離は、そのような修正は、モデルのビューには影響を与えません。
- すべての相互作用がプレゼンターの内部で行われているため、モデルのより効率的な利用、
- プレゼンターは、論理プレゼンタ(頻繁に変更常にモデルのビューの変化の割合)を変えずに、複数のビューのために使用することができます
- 取り外し可能なユーザー・インターフェース(ビュー)ユニットテスト(プレゼンターのビジネスロジック)
短所
そのためプレゼンターのビューをレンダリングする、プレゼンターのビューと相互作用して、あまりにも頻繁になります。あまりにも多くのプレゼンタービューをレンダリングする場合、多くの場合、それはあまりにも密接に特定のビューに関連付けられて作ることを理解する必要はほとんどありません。ビューを変更する必要があるならば、我々はまた、プレゼンターを変更する必要があります。例えば、元々のHTMLプレゼンターは今PDFを提示するために必要なレンダリングするために使用し、ビューはそうも変更する必要があります。
詳細については、を参照してくださいBaiduの百科事典--MVP。
第三に、サンプル・コード
モデル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
クラス : パブリック AbstractModel { パブリック: モデル(){MDATA = 98。}
INT のgetData ()オーバーライド {戻り MDATA。}ボイドのsetData (INTデータ)オーバーライド { MDATA =データ。std :: coutの << "モデル:データが更新され、" <<はstd ::てendl ; }
プライベート:int型 MDATA。}。
|
ビュー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
クラス ビュー: 公共 AbstractViews { パブリック: ビュー(AbstractPresenter pPresenter *) { mpPresenter = pPresenter; }無効表示(int型データ)をオーバーライド { STD :: COUT << "表示:表示" << <<データ STD ::てendl ; }
無効 にonKeyDown ()オーバーライド { STD :: COUT << "ビュー:コールmpPresenterはITを処理するための" << STD ::てendl ; mpPresenter-> increaseData(); }
プライベート: AbstractPresenter * mpPresenter。 }。
|
モデレータ
1 2 3 4 5 < 大专栏 MVP简要示例span class="line">6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
class Presenter : public AbstractPresenter { public: Presenter(AbstractModel* pModel) { mpModel = pModel; mpView = new View(this); mpView->display(pModel->getData());
std::cout << "User: onKeyDown" << std::endl; mpView->onKeyDown(); std::cout << "User: onKeyDown" << std::endl; mpView->onKeyDown(); std::cout << "User: onKeyDown" << std::endl; mpView->onKeyDown(); std::cout << "User: onKeyDown" << std::endl; mpView->onKeyDown(); std::cout << "User: onKeyDown" << std::endl; mpView->onKeyDown(); } ~Presenter() { delete mpView; }
void increaseData() override { std::cout << "Presenter: mpModel->getData() < 100 ?" << std::endl; if (mpModel->getData() < 100) { std::cout << "Presenter: increaseData" << std::endl; mpModel->setData(mpModel->getData() + 1); std::cout << "Presenter: send the data which needs displaying" << std::endl; mpView->display(mpModel->getData()); } }
private: AbstractModel* mpModel; AbstractView* mpView; };
|
主程序及运行结果
1 2 3 4 5 6 7 8 9 10 11 12
|
int main() { AbstractModel* pModel = new Model; AbstractPresenter* pPresenter = new Presenter(pModel); delete pPresenter; delete pModel;
システム(「一時停止」)。リターン0 ; }
|
付録:完全なソースパッケージ
第四に、推奨学習
プロジェクト
リストソフトウェア(アンドロイド、MVP)ですかいるサンプルプロジェクトでの学習のためにGoogleが提供されます。README.mdファイルには、それらはそれに応じて説明は省略する。また、あなたは、他のアプリケーションソフトウェアを達成するためのフレームワークを使用する方法を学ぶの他の枝を表示することができます。
白を完了するためにいくつかの提案
- クローンプロジェクトの後やZip解凍をダウンロードし、AndroidのStudioを使用してプロジェクトを開きます
- 失敗は成功するまで、プロンプトを操作する場合は、メニューバーの[ビルドの下に「プロジェクトを作成」をクリックします
- ファイル名を指定して実行「を実行し 『アプリ』」の下のメニューバーをクリックします。
- 実際または仮想のアンドリュースアンドリュースマシンでソフトウェアの実際の動作を理解するために、
- コード分析に関連MVPフレームワーク
- 経験、組織をまとめ、標準化された方法に関連するインタフェースコード