为了使用 mvp 模式在 android 上实现“干净”架构,建议将 android 框架视为插件,并且不要将任何 android 感知依赖项泄漏到 Presenter 层。使用 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,而演示者不依赖于任何与 android 相关的东西?