MVPの簡単な例

  MVPすなわち古典からモデル-ビュー-プレゼンター、MVCは、彼らの基本的な考え方を進化させ、共通の場所にあります。ロジックを担当するコントローラ/プレゼンターを取り扱い、モデルビューが表示するための責任がある、データを提供します。

まず、構造

図構成MVP

  MVPでは、ビューは直接モデルと通信していないが、間接的にすなわちプレゼンター、通過するすべての相互作用が改善するために、プレゼンターの内部で行われます。

1 
2
3
4
5
6
ビュー::にonKeyDown()オーバーライド
{ STD :: COUT << "表示:mpModel->のgetData()<100?" << STD :: てendl ; IF(mpModel->のgetData()< 100// FOUNDアクセスビューモデルなぜなら、そうここにあり、ビジネス・ロジック・コード 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; // 假设该Model的生命周期与整个软件相等

システム(「一時停止」)。リターン0 ; }


業績

付録:完全なソースパッケージ

第四に、推奨学習

プロジェクト

  リストソフトウェア(アンドロイド、MVP)ですかいるサンプルプロジェクトでの学習のためにGoogleが提供されます。README.mdファイルには、それらはそれに応じて説明は省略する。また、あなたは、他のアプリケーションソフトウェアを達成するためのフレームワークを使用する方法を学ぶの他の枝を表示することができます。
概要

白を完了するためにいくつかの提案
  • クローンプロジェクトの後やZip解凍をダウンロードし、AndroidのStudioを使用してプロジェクトを開きます
  • 失敗は成功するまで、プロンプトを操作する場合は、メニューバーの[ビルドの下に「プロジェクトを作成」をクリックします
  • ファイル名を指定して実行「を実行し 『アプリ』」の下のメニューバーをクリックします。
  • 実際または仮想のアンドリュースアンドリュースマシンでソフトウェアの実際の動作を理解するために、
  • コード分​​析に関連MVPフレームワーク
    プロンプト
  • 経験、組織をまとめ、標準化された方法に関連するインタフェースコード

おすすめ

転載: www.cnblogs.com/lijianming180/p/12376148.html