在RxJava上使用Android上的干净MVP:如何在仍然观察UI线程的同时保持演示者没有任何Android知识?

在RxJava上使用Android上的干净MVP:如何在仍然观察UI线程的同时保持演示者没有任何Android知识?,第1张

概述为了在android上使用mvp模式实现“干净”架构,建议将android框架视为插件,而不是将任何知识产权感知依赖项泄漏到presenter层.使用rxjava,如果我有一个设计用于将数据“推送”到视图层的演示者,我可能希望有这样的逻辑:publicinterfaceSearchPresenter{interfaceViewLayer

为了在android上使用mvp模式实现“干净”架构,建议将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)}@OverrIDepublic voID unbind() {    compositedisposable.dispose();}

但是,通过观察’AndroIDSchedulers.mainThread()’,这会强制依赖于:

import io.reactivex.androID.schedulers.AndroIDSchedulers

在这一点上,我的主持人现在知道androID并且与之相关;我想避免.

处理这个的建议方法是什么,以便保证在AndroID的UI(主)线程上将结果传递给VIEwLayer,而演示者不保持与androID相关的任何依赖?

解决方法:

AndroIDSchedulers.mainThread()使用AndroID代码在主线程上安排 *** 作,不要直接在演示者中使用它.
您可以重构演示者以在其构造函数中使用Scheduler,在生产代码中使用常规的AndroIDSchedulers.mainThread()和Schedulers.io(),在测试中您只需发送Schedulers.trampoline()或Schedulers.immediate().

在此示例中看到此模式:https://github.com/riggaroo/GithubUsersSearchApp/blob/master/app/src/main/java/za/co/riggaroo/gus/presentation/search/UserSearchPresenter.java

和它的测试类在这里:
https://github.com/riggaroo/GithubUsersSearchApp/blob/8b83095d7a2cc8f3cb69a945224ab4c37cf54a37/app/src/test/java/za/co/riggaroo/gus/presentation/search/UserSearchPresenterTest.java

总结

以上是内存溢出为你收集整理的在RxJava上使用Android上的干净MVP:如何在仍然观察UI线程的同时保持演示者没有任何Android知识?全部内容,希望文章能够帮你解决在RxJava上使用Android上的干净MVP:如何在仍然观察UI线程的同时保持演示者没有任何Android知识?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1115234.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存