我试图找到一种方法来执行以下操作:
当我的应用程序打开时,它将通过订阅我的数据层的可观察性来加载数据的网格视图。我想弄清楚的是我如何能够对网格视图进行某种数据突变,例如在用户点击隐藏按钮时隐藏网格项,或者对项进行排序..然后拥有数据层将更新的数据发送到任何列表。我的目标是希望任何类能够进行此操作,然后将新数据更新传播到所有ConnectableObservers
。
理想情况下,我能够在我的域层中调用一些用例,并将数据保存到我的数据层,然后用新的更新数据调用所有侦听器。
我遇到的问题是,我似乎无法想到一种方法来调用onNext我的数据层可观察而无需重新订阅。
这是我在域层中想要的伪代码解释:
gridRepository.hidElement(someId).onCompleteDo({action -> gridRepository.getGridData()})
gridRepository
只是我数据层的接口,而hideElement()
应该返回一个Observable。
然后应该在我的表示层订阅者中触发下一个,因此我的网格视图会使用新修改的数据进行更新。
我的基本目标是从我的表示层中的某种事件总线实现中取消这个逻辑,并在我的域中使用这个逻辑,因为我可以入侵一些影响其他层的数据状态而不仅仅是表示,因此,为这些事件设置一个中央调度位置会很有用。
旁注: 我从这个项目结构构建我的应用程序,因为我认为它有一个优雅,但它并没有像我喜欢的那样解决所有问题。 :https://github.com/android10/Android-CleanArchitecture
对此或建议的任何帮助将不胜感激。
答案 0 :(得分:0)
我决定用一个用作事件总线的发布主题来解决这个问题。它被注入多个班级。
return bookRepository.getLibrary()
.repeatWhen(e -> eventBus.toObservable()
.filter(event -> event.equals(LIBRARY_CHANGED)));
我的事件总线只是一个包装类的发布主题:
public class EventBus {
private final PublishSubject<Object> _bus = PublishSubject.create();
public void post(Object event) {
_bus.onNext(event);
}
public Observable<Object> toObservable() {
return _bus;
}
}
那么在任何应该更新我的库的事件上我都会这样做:
repository.searchLibrary(params.searchTerm)
.doOnComplete(() -> eventBus.post(LIBRARY_CHANGED));
这将触发我的库再次被调用。
LIBRARY_CHANGED只是一个枚举元素。