我正在对我们的部分代码进行重构,但对某一具体问题的推理感到不确定。我们的业务需求如下。
以前,所有这些都是在一个类中处理的,它是由4个不同的视图共享的。但是,我不确定我的推理是否正确。我是按以下方式做的。
fun init(){
firstTrigger : ReplaySubject<Boolean> = ReplaySubject.create()
secondTrigger : ReplaySubject<Boolean> = ReplaySubject.create()
thirdTrigger : ReplaySubject<Boolean> = ReplaySubject.create()
forthTrigger : ReplaySubject<Boolean> = ReplaySubject.create()
}
fun networkRequestNrOne() {
firstObservable = apiService.networkRequestNrOne()
compositeDisposable.add(firstObservable
.retryWhenError(5, 1)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
success -> first.onNext(true) },
{ throwable -> handleError(throwable) })
)
}
fun observeWhenToFire(): Observable<Boolean> {
return Observable.zip(firstTrigger, secondTrigger, thirdTrigger,
forthTrigger,
Function4<Boolean, Boolean, Boolean, Boolean, Boolean> { first, second, third,
forth ->
//handle checking if all are true for example.
})
}
现在我想重构它,并为这种情况创建4个不同的UseCase和一个新的UseCase,它将包括所有4个UseCase并返回一个合并的响应。
然而,我仍然需要使用Rx Subjects来处理这种情况。每个UseCase都会取一个与该UseCase绑定的主题 作为参数,而UseCase。的拉链,其他所有的 用例,将 包括4*1科目.
有什么更好的方法吗?我甚至想到了使用常规回调,这可能是更易读的代码。 我确实也使用了coroutines,然而这次我不想把这个逻辑重构成coroutines,因为我们的custom retryWhenError扩展名这是很独特的:)
我不知道我是否真的明白你的问题,但这可能会帮助你。
Completable.merge(
listOf(
usecase1.ignoreElement(),
usecase2.ignoreElement(),
usecase3.ignoreElement(),
usecase4.ignoreElement()
)
).andThen(useCase5.ignoreElement())
.observeOn(AndroidSchedulers.mainThread())
.doOnComplete { handleSuccess() }
.doOnError { handleError(it) }