mvp パターンを使用して Android に「クリーンな」アーキテクチャを実装するために、Android フレームワークをプラグインとして扱い、Android 対応の依存関係をプレゼンター レイヤーに漏らさないようにすることをお勧めします。ビューレイヤーにデータを「プッシュ」するように設計されたプレゼンターがある場合、rxjavaを使用して、次のようなロジックが必要になる場合があります。
public interface SearchPresenter {
interface ViewLayer {
void updateResults(List<SearchResult> searchResults)
}
void bind(ViewLayer viewLayer);
void unbind();
}
public class SearchPresenterImpl implements SearchPresenter {
ViewLayer viewLayer;
CompositeDisposable compositeDisposable;
@Override
public void bind(ViewLayer viewLayer) {
this.viewLayer = viewLayer;
compositeDisposable = new CompositeDisposable();
compositeDisposable.add(
searchInteractor.getSearchResults()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::refreshView));
}
private void refreshView(List<SearchResult> searchResults) {
//send the results back to the view layer to update a RecyclerView
viewLayer.updateResults(searchResults)
}
@Override
public void unbind() {
compositeDisposable.dispose();
}
ただし、「AndroidSchedulers.mainThread()」を観察することにより、次のものへの依存が強制されます。
import io.reactivex.android.schedulers.AndroidSchedulers
その時点で、私のプレゼンターはアンドロイドについて知っており、それに結びついています。避けたいこと。
プレゼンターが Android に関連するものへの依存を維持している間に、結果が Android の UI (メイン) スレッドの ViewLayer に配信されることが保証されるように、これを処理するための推奨される方法は何ですか?