qingmei2/MVI-Architecture

Action,Result是否应该是一类对应一类呢

CoderLengary opened this issue · 1 comments

这里面有段代码让我有点困惑,在HomeActionProcessorHolder这个类中,InitIntent 会触发 Paging 这个库的方法,比如从零加载和向下分页,

private val initialActionTransformer =
        ObservableTransformer<HomeAction.InitialAction, HomeResult.InitialResult> { action ->
            action.flatMap<HomeResult.InitialResult> {
                repository.getReceivedPagedList(
                    boundaryCallback = object : PagedList.BoundaryCallback<ReceivedEvent>() {
                        override fun onZeroItemsLoaded() {
                            this@HomeActionProcessorHolder.onZeroItemsLoaded()
                        }

                        override fun onItemAtEndLoaded(itemAtEnd: ReceivedEvent) {
                            this@HomeActionProcessorHolder.onItemAtEndLoaded(itemAtEnd)
                        }
                    }
                ).map(HomeResult::InitialResult).toObservable()
            }
        }

我注意到这两个方法会发出一个 PublishSubject<HomeResult.LoadingPageResult>,它会将:加载中、加载成功、加载失败 传递出去。如果这次请求成功的话,还会有一个 InitialResult 包括了请求成功返回的列表。
所以总结一下,InitialAction 会带来两种 Result,一个是 InitialAction 对应的 InitialResult,一个是 另外生成的 LoadingPageResult。我困惑的地方就在于,一种 Action 不应该只对应一种 Result 么。如果 一种 Action 可以对应多种 Result,感觉就没有一个单链条传递的关系了。

MVI 感觉是一个优秀的模式,虽然它的代码量多,但是它的条理十分清晰,什么 Intent 就会变成什么样的 Action,返回什么样的 result ,最后统一成不同 ViewState。怎么说,就像是多个单链条,在终点时汇聚。这就是我对 MVI 的一部分理解。针对上述代码来说,打破了我对这个模式的认识,所以很不解。。。