Mobius:在EffectHandler上,变形金刚,使用者,动作和功能之间有什么区别?

时间:2019-01-14 14:43:06

标签: android spotify-mobius

在EffectHandler上,变形金刚,使用者,动作和功能之间有什么区别?我看到in the docs支持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 :(得分:1)

每个类型的签名都会给您一个提示,但是粗略的总结是: -使用者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)(已编辑)

答案 1 :(得分:0)

这是每个方法的工作原理,

╔═════════════╤════════════════════╤═════════════════════╗
║     Type    │  Receives effect?  │ Can produce events? ║
╠═════════════╪════════════════════╪═════════════════════╣
║ Action      │        No          │         No          ║
║ Consumer    │        Yes         │         No          ║
║ Transformer │        Yes         │         Yes         ║
╚═════════════╧════════════════════╧═════════════════════╝