MVPパターンで、UIのクリックの処理を担当するのは誰ですか?
例えば。 MVP以外のアプローチは次のようになります。
counterButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
totalClicks++;
counterTextView.setText("Total clicks so far: "+totalClicks);
}
});
MVPの使用はonClick
がPresenter
の責任ですか?または、View
がそれを処理できますか?
誰かがこれを明確にしてくれませんか?
OnClickはPresenter
メソッドを呼び出す必要があります。あなたはプレゼンターでビジネスを行う必要があり、UIを更新する必要がある場合は、View
でメソッドを定義してプレゼンターから呼び出す必要があります。
View
exのメソッドが必要です:
public void showCounterCount(final int totalClicks){
counterTextView.setText("Total clicks so far: "+totalClicks);
}
また、Presenter
にメソッドと変数が必要です。
int totalClicks = 0;
public void onCounterButtonClicked(){
totalClicks++;
mView.showCounterCount(totalClicks);
}
次のようにコードをリファクタリングします。
counterButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mPresenter.onCounterButtonClicked();
}
});
より複雑でクリーンなアーキテクチャの場合、インタラクターでユースケースビジネスを実行できます。 (あなたの例では、カウンター値の増加はあなたのアプリケーションのユースケースです)
インタラクターを定義し、そこでカウンター値をインクリメントできます。
CounterInteractor:
public CounterInteractor{
public int incrementCounter(int currentCounter){
return currentCounter+1;
}
}
そして、以下のようにプレゼンターをリファクタリングしてください:
int totalClicks = 0;
CounterInteractor mCounterInteractor = new CounterInteractor();
public void onCounterButtonClicked(){
totalClicks = mCounterInteractor.incrementCounter(totalClicks);
mView.showCounterCount(totalClicks);
}
このアプローチでは、ビジネスロジックをプレゼンターから完全に分離し、プレゼンターでコードを複製せずにユースケースの概念を再利用します。これはよりクリーンなアプローチです。
このgitリポジトリで、さまざまなMVPアプローチを確認することもできます。 https://github.com/googlesamples/Android-architecture/tree/todo-mvp-clean/
幸運を。
編集:
これが私の軽量のWikipediaクライアントプロジェクトソースです: https://github.com/savepopulation/wikilight
MVP
を実装しようとしています。 (MVP + Dagger2 + RxJava)
MVPでは、クリックをキャプチャする方法を知ることはViewの責任であり、クリックで何を行うかを決定するのではありません。 Viewがクリックをキャプチャするとすぐに、Presenterで関連するメソッドを呼び出して、それに作用する必要があります。
- - - - - - - - - - 見る - - - - - - - - - -
button1.setOnClickListener(new OnClickListener({
presenter.doWhenButton1isClicked();
}));
- - - - - - - - - プレゼンター - - - - - - - -
public void doWhenButton1isClicked(){
// do whatever business requires
}
Androidのアーキテクチャパターンに関する一連の記事があります パート はMVPに関するものです。あなたはそれが役に立つかもしれません。