如何使用rx-java处理存储库

时间:2016-04-20 09:52:25

标签: java android rx-java reactive-programming

您好,
我想知道如何使用java-rx处理从存储库中删除 以下是我的域名的快速概述。

我的商业对象:

public class MyObject{
  public boolean isActive();
  public boolean isSelected();
}

一次只能激活或选择一个对象。

存储库:

public interface Repository{
 Observable<MyObject> get();
 void delete(MyObject obj); //do i really need this?
}

现在我想在某些情况下删除Objectes:

-Delete selected object only if more than 1 Object is in Repository  
-if selected object == acvtive we have to set another object active

这是我的存储库的实现,就像我认为的那样:

public class RepositoryImpl implements Repository{
private void List<MyObject> myObjects;

@Override
public Observable<MyObject> get(){
    if(myObjects != null) return Observable.from(myObjects);
    return Observable.create((Observable.OnSubscribe<MyObject> subscriber -> {
        try{
            myObjects = gson.fromJson(...);
            for(MyObject obj : myObjects){
                subscriber.onNext(obj);
            }
            subscriber.onCompleted();
        }catch(Exception e){
            subscriber.onError(e);
        }
    }).observeOn(AndroidSchedulers.mainThread())
      .subscribeOn(Schedulers.io());

}

@Override
void delete(MyObject obj){
    //we assume myObjects is filled
    if(myObjects.size < 2) return;
    boolean wasActive = false;
    if(obj.isActive()){
        wasActive = true;
    }
    myObjects.remove(obj);
    MyObject first = myObjects.get(0);
    first.setActive(wasActive);
    first.setSelected(true);
}

所以第一个问题是,我是否必须在存储库中实现删除功能,或者是否有一种奇特的方法来处理从get方法获得的流的删除。

第二个是,是否有一种简单的方法可以通知UI(RecyclerView)有关存储库中的更改(我使用MVP而非绑定)?

0 个答案:

没有答案