【发布时间】:2015-09-11 14:11:26
【问题描述】:
最近我开始使用Reactive extensions 的android 项目。我已经阅读了一些介绍和教程,但我仍然处于初学者的水平。根据this文章:
一切都是流
但是我目前的理解(或心理障碍)告诉我,任何改变状态的操作(例如从存储库中删除数据)都不应该是/返回流/可观察的。
关于我的域的一些背景知识:我有一个注册地理围栏的用例。自geofences do not survive reboot 以来,我一直在跟踪存储库中的活动地理围栏。有时应用需要移除地理围栏,因此实现此目的的基本步骤是:
- 从存储库中检索地理围栏
- 从设备中移除地理围栏
- 从存储库中删除地理围栏
我目前的解决方案如下:
geofenceRepository.get(id)
.map(new Func1<Geofence, String>() {
@Override
public String call(Geofence geofence) {
geofenceRepository.delete(geofence.getId()); // synchronous call here
return geofence.getRequestId();
}
})
.toList()
.flatMap(new Func1<List<String>, Observable<Status>>() {
@Override
public Observable<Status> call(List<String> ids) {
return locationProvider.removeGeofences(ids);
}
});
Geofence 是我的自定义数据结构,locationProvider 来自this nice library。
您会注意到,与删除不同,数据检索是作为流/可观察实现的。
我不喜欢上面例子中的:map operator with side effect
问题
- 什么是更“被动”的更好解决方案,我在这里缺少什么?
- 使用响应式方法是否有意义?
reactive programming 我的意思是:
使用异步数据流编程
【问题讨论】:
标签: android state reactive-programming rx-java rx-android