2017-01-14 1 views
3

Je développe une application Android avec MVP et RxJava. Eh bien, j'ai un doute:MVP + RxJava - Placer les planificateurs dans le présentateur ou dans l'interacteur?

Quand je crée mon présentateur et interacteur je peux me mettre ordonnanceurs dans le présentateur, comme ceci:

ordonnanceurs dans le présentateur

Présentateur:

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

Connexion Interactor:

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

Ou je peux définir les ordonnanceurs dans le Interactor, comme ceci:

ordonnanceurs dans le Interactor

Présentateur:

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

Connexion Interactor:

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

Je vois que Google conseille de définir des Schedulers dans l'Interactor. Vous pouvez le voir dans ce lien:

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

Mais beaucoup de gens mettre le code dans le présentateur, comme dans cet exemple:

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

Alors, Est-ce que je mets ordonnanceurs dans le Présentateur ou dans l'interacteur?

(je pense qu'il est une meilleure idée de mettre dans le présentateur que le travail Intractor est seulement pour obtenir les données, mais peut-être que je me trompe ...)

Répondre

2

Si vous voulez avoir une bonne composabilité, je le ferais recommandez que vous spécifiez vos ordonnanceurs aussi tard que possible (sauf si nécessaire); Cela signifie généralement juste avant de s'abonner. De cette façon, vous pouvez réutiliser f.e. login() dans un autre flux sans avoir à fil-hop tout le temps.

Cependant, cela ressemble, juste mon opinion ...

+0

Je suis d'accord. Merci! –

0

Si vous allez à l'unité tester le présentateur, vous devriez probablement mettre le planificateur dans l'interacteur, parce que l'on est subscribeOn() (la plupart du temps) Android (en raison de l'ordonnanceur thread principal) et vous ne serez pas en mesure de tester votre présentateur (sauf si vous vous moquez des planificateurs) si elle a des classes spécifiques Android à l'intérieur de celui-ci.

+1

Je peux créer un fournisseur de Scheduler et le simuler dans le Presenter via Depency Injection. Vous pouvez voir un bon exemple dans ce repo: https://github.com/googlesamples/android-architecture/tree/todo-mvp-rxjava –