2017-01-14 2 views
3

Я разрабатываю приложение для Android с MVP и RxJava. Ну, у меня есть сомнения:MVP + RxJava - Поставить планировщиков в презентаторе или в интерактивном режиме?

Когда я создаю мои выступающие и Interactor я могу поставить меня Планировщик в презентации, как это:

Планировщиков в Presenter

Presenter:

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

Войти Interactor:

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

Или я могу установить Планировщик в Interactor, как это:

Планировщиков в Interactor

Presenter:

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

Войти Interactor:

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

Я вижу что Google советует устанавливать Планировщиков в Interactor. Вы можете увидеть это в этой ссылке:

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

Но многие люди ставят код в Presenter, как в этом примере:

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

Итак, ли я установить Планировщик в Presenter или в Interactor?

(я думаю, что это лучшая идея поставить в Presenter, как работа Intractor только, чтобы получить данные, но, возможно, я ошибаюсь ...)

ответ

2

Если вы хотите иметь хорошую компонуемость, я бы рекомендуйте указать планировщиков как можно позднее (если это необходимо); это обычно означает прямо перед подпиской. Таким образом, вы можете повторно использовать f.e. login() в другом потоке, не требуя непрерывного воспроизведения.

Однако, это похоже, только мое мнение ...

+0

Я согласен. Благодаря! –

0

Если вы собираетесь проверить блок выступающему вы, вероятно, следует положить планировщик в интерактора, потому что subscribeOn() один (большую часть времени) связанных с Android (из-за планировщика основного потока), и вы не сможете протестировать своего ведущего (если вы не издеваетесь над планировщиками), если в нем есть определенные классы андроида.

+1

Я могу создать поставщика планировщика и высмеять его в Presenter через Depency Injection. Вы можете увидеть хороший пример в этом репо: https://github.com/googlesamples/android-architecture/tree/todo-mvp-rxjava –

Смежные вопросы