Мобиус: В EffectHandler, в чем разница между трансформаторами, потребителями, действиями и функциями? - PullRequest
0 голосов
/ 14 января 2019

В EffectHandler, в чем разница между трансформаторами, потребителями, действиями и функциями? Я вижу, что 4 типа поддерживаются в документах :

ObservableTransformer<Effect, Event> rxEffectHandler =
    RxMobius.<Effect, Event>subtypeEffectHandler()
        // Effect Handlers can be an ObservableTransformer
        .addTransformer(Effect.SearchRequest.class, this::handleSearchRequest)
        // They can also be a Consumer<F> (eg. Consumer<ShowErrorMessage>)
        .addConsumer(Effect.ShowErrorMessage.class, view::showErrorMessage, AndroidSchedulers.mainThread())
        // Or an Action
        .addAction(Effect.SomethingElse.class, this::handleSomethingElse)
        // Or a Function<F, E> (eg. Function<SaveToDb, Event>)
        .addFunction(Effect.SaveToDb.class, this::handleSavingToDb)
        .build();

какой использовать? Может быть, мне не хватает RxBackground, с которого мне нужно сначала ознакомиться?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Вот как работает каждый из них,

╔═════════════╤════════════════════╤═════════════════════╗
║     Type    │  Receives effect?  │ Can produce events? ║
╠═════════════╪════════════════════╪═════════════════════╣
║ Action      │        No          │         No          ║
║ Consumer    │        Yes         │         No          ║
║ Transformer │        Yes         │         Yes         ║
╚═════════════╧════════════════════╧═════════════════════╝
0 голосов
/ 14 января 2019

Типовые подписи каждого дают вам подсказку, но грубая сводка такова: - Потребитель F -> (): получает объект эффекта в качестве аргумента и вызывает что-либо как эффект. Пример: Toast.makeText(context, effect.message(), duration).show();

  • Действие () -> (): То же, что и потребитель, но вам ничего не нужно от объекта эффекта. Пример: context.startActivity(new Intent(MyActivity.class))

  • Функция F -> E: Блокировка преобразования из эффекта в новое событие. Может использоваться, если вы знаете, что будет отправлено ровно одно событие, и вы можете безопасно сделать это как блокирующий вызов. Пример: return Event.lookupResult(repository.get(effect.key()))

  • Transformer Observable<F> -> Observable<E>: самый мощный API, полный rx, который может делать все, чтобы преобразовать поток эффектов в поток событий, включая передачу более одного события за эффект или даже создание событий без получения эффект первый. Пример: effects.flatMap(effect -> return loadData(effect.uri())).map(Event::dataLoaded) (отредактировано)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...