当前位置: 首页 > 知识库问答 >
问题:

MVP RxJava-将调度程序放在演示者还是交互器中?

汤承允
2023-03-14

我正在用MVP和RxJava开发一个Android应用程序。嗯,我有一个疑问:

创建演示者和交互者时,我可以在演示者中放置我的计划者,如下所示:

演示者中的调度程序

节目主持人:

 override fun tryLogin(username: String, password: String) {
                mLoginInteractor.login(username, password)
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(object : Subscriber<User>(){
        [...]
        }

登录交互者:

override fun login(username: String, password: String) =
 mRetrofit.create(ApiClient::class.java).login()

或者我可以在交互器中设置调度程序,如下所示:

Interactor中的调度器

节目主持人:

 override fun tryLogin(username: String, password: String) {
                mLoginInteractor.login(username, password)
                        .subscribe(object : Subscriber<User>(){
        [...]
        }

登录交互者:

    override fun login(username: String, password: String) =
     mRetrofit.create(ApiClient::class.java).login()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())

我看到谷歌建议在交互器中设置调度程序。您可以在此链接中看到这一点:

https://github.com/googlesamples/android-architecture/tree/todo-mvp-rxjava/

但许多人将代码放在演示者中,如以下示例:

https://github.com/BoydHogerheijde/Android-MVP-example/blob/master/app/src/main/java/nl/bhogerheijde/example/rxmvp/interactor/Interactor.java

那么,我是在Presenter还是在Interactor中设置调度器呢?

(我认为最好让演示者参与进来,因为主持人的工作只是获取数据,但也许我错了……)

共有2个答案

汪学真
2023-03-14

如果要对演示者进行单元测试,可能应该将调度器放在interactor中,因为subscribeOn()一个(大多数情况下)与android相关(因为主线程调度器),如果演示者中有特定于android的类,则无法对其进行测试(除非模拟调度器)。

宗政元青
2023-03-14

如果您希望具有良好的可组合性,我建议您尽可能晚地指定调度器(除非必要);这通常意味着就在订阅之前。这样,您就可以在另一个流中重用f.e.login(),而无需一直进行线程跳转。

然而,这就像,只是我的观点。。。

 类似资料:
  • 本文向大家介绍你是一个倾听者还是演讲者?相关面试题,主要包含被问及你是一个倾听者还是演讲者?时的应答技巧和注意事项,需要的朋友参考一下 此问题主要考察面试者的性格。 其实对于产品来说,既要做一个倾听者(面向用户),也要做一个演讲者(面向内部人员)。 倾听者和演讲者并不是对立或者冲突的,都是需要沟通交流的一部分。 在生活工作过程中,既要做一个善于演讲的人,也有做一个诚挚的倾听者;比方说在产品过程中,

  • FuelPHP在控制器之后提供一个额外的层来生成视图。 一旦控制器处理输入并完成业务逻辑,它就会将控制权发送给Presenter , Presenter负责处理额外的逻辑,例如从数据库中获取数据,设置视图数据等,然后调用View宾语。 我们可以使用Presenter类渲染视图,如下所示 - fuel/app/classes/controller/employee.php public Contro

  • 下面是我试图实现的:打开一个shell(korn或bash,没关系),从该shell,我想打开一个ssh连接()。在某个时候,它可能会发生,我会被提示输入密码,或者我可能会被问到是否确定我想要连接(违规密钥)。 在有人问之前:是的,我知道有一个ssh2 exec调用插件,但是我正在使用的服务器不支持它,也不太可能这样做。 以下是我迄今为止所尝试的: 然后我尝试读取控制台输出(),查看下一步必须传递

  • 问题内容: 我计划使用Quartz调度程序,因为我阅读了很多好的意见。 我的问题如下:在任何给定时间,系统中都会存在成千上万的触发器。大多数触发器将仅触发一个事件并死亡。另外,很有可能我将不得不在分配许多作业后取消它们(基于新的输入)。 石英可以缩放吗?推荐哪个JobStore?我计划在mysql上使用JDBC。 附加信息 :我的工作将发送电子邮件或通过HTTP发布将数据发布到其他服务(通过WAN

  • 我使用RxJava2 Android网络的网络调用。我面临的问题是,当我试图通过命中API时,有时它不会给出任何响应,而当我试图通过命中API时,它总是给出回应 和

  • 开始调试 # pdb_script.py #!/usr/bin/env python3 # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj: def __init__(self, num_loops): self.count = num_