保存时如何触发模型以提供新数据
How can I trigger a model to give new data when a save occurs
我正在尝试找出一种方法来执行以下操作:
当我的应用程序打开时,它将通过订阅我的数据层的 observable 来加载数据的网格视图。我想弄清楚的是如何对该网格视图进行某种数据突变,例如在用户单击隐藏按钮时隐藏网格项目,或对项目进行排序……然后让数据层发送更新数据到任何列表。我的目标是我希望任何 class 能够进行此操作,然后将新数据更新传播到所有 ConnectableObservers
。
所以理想情况下,我可以在我的域层中调用一些用例,并让该处理程序将数据保存到我的数据层,然后它将使用我的新更新数据调用所有侦听器。
我 运行 遇到的问题是,我似乎想不出一种方法来调用我的可观察数据层的 onNext 而无需重新订阅。
这是我在领域层中想要的伪代码解释:
gridRepository.hidElement(someId).onCompleteDo({action -> gridRepository.getGridData()})
其中 gridRepository
只是我的数据层的接口,hideElement()
应该 return 一个 Observable。
这应该会触发我的表示层订阅者中的下一个,因此我的网格视图会使用新修改的数据进行更新。
我的基本目标是从我的表示层中的某种事件总线实现中分离出这种逻辑,并在我的领域中拥有这种逻辑,因为我可以入侵这些数据状态中的一些,影响其他层,而不仅仅是演示文稿,因此为这些事件设置一个中央调度位置将很有用。
旁注:
我根据这个项目结构构建了我的应用程序,因为我认为它很优雅,但它并没有按照我希望的方式解决所有问题。 : https://github.com/android10/Android-CleanArchitecture
如有任何帮助或建议,我们将不胜感激。
我决定使用用作事件总线的发布主题来解决这个问题。它被注入多个 classes。
return bookRepository.getLibrary()
.repeatWhen(e -> eventBus.toObservable()
.filter(event -> event.equals(LIBRARY_CHANGED)));
我的事件总线只是一个带有包装器的发布主题 class:
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 只是一个枚举元素。
我正在尝试找出一种方法来执行以下操作:
当我的应用程序打开时,它将通过订阅我的数据层的 observable 来加载数据的网格视图。我想弄清楚的是如何对该网格视图进行某种数据突变,例如在用户单击隐藏按钮时隐藏网格项目,或对项目进行排序……然后让数据层发送更新数据到任何列表。我的目标是我希望任何 class 能够进行此操作,然后将新数据更新传播到所有 ConnectableObservers
。
所以理想情况下,我可以在我的域层中调用一些用例,并让该处理程序将数据保存到我的数据层,然后它将使用我的新更新数据调用所有侦听器。
我 运行 遇到的问题是,我似乎想不出一种方法来调用我的可观察数据层的 onNext 而无需重新订阅。
这是我在领域层中想要的伪代码解释:
gridRepository.hidElement(someId).onCompleteDo({action -> gridRepository.getGridData()})
其中 gridRepository
只是我的数据层的接口,hideElement()
应该 return 一个 Observable。
这应该会触发我的表示层订阅者中的下一个,因此我的网格视图会使用新修改的数据进行更新。
我的基本目标是从我的表示层中的某种事件总线实现中分离出这种逻辑,并在我的领域中拥有这种逻辑,因为我可以入侵这些数据状态中的一些,影响其他层,而不仅仅是演示文稿,因此为这些事件设置一个中央调度位置将很有用。
旁注: 我根据这个项目结构构建了我的应用程序,因为我认为它很优雅,但它并没有按照我希望的方式解决所有问题。 : https://github.com/android10/Android-CleanArchitecture
如有任何帮助或建议,我们将不胜感激。
我决定使用用作事件总线的发布主题来解决这个问题。它被注入多个 classes。
return bookRepository.getLibrary()
.repeatWhen(e -> eventBus.toObservable()
.filter(event -> event.equals(LIBRARY_CHANGED)));
我的事件总线只是一个带有包装器的发布主题 class:
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 只是一个枚举元素。