2017-01-29 1 views
0

私は、次のことを行う方法を見つけようとしています: 私のアプリが開くと、データレイヤの購読によってデータのグリッドビューが読み込まれます観察可能である。私が理解しようとしているのは、ユーザーがhidボタンをクリックするかグリッドアイテムを非表示にしたり、アイテムを並べ替えたりするなど、グリッドビューに何らかのデータ変換を行う方法です。何かのリストにデータを更新しました。私の目標は、どのクラスでもこの操作を行い、その新しいデータの更新をすべてConnectableObserversに伝播させることです。保存が発生したときにモデルをトリガーして新しいデータを与える方法

ドメインレイヤーでユースケースを呼び出し、そのデータをデータレイヤーに保存して、新しい更新データですべてのリスナーを呼び出すことができれば理想的です。

私が取り組んでいる問題は、再サブスクリプションなしで私のデータレイヤーを観察可能な次のものを呼び出す方法を考えることができないということです。

gridRepository.hidElement(someId).onCompleteDo({action -> gridRepository.getGridData()}) 
gridRepositoryは私のデータ層への単なるインターフェースで

、そしてhideElement()が観測を返す必要があります:

は、ここで私は自分のドメイン層に何をしたいの擬似コードの説明です。

これにより、プレゼンテーションレイヤのサブスクライバでonがトリガーされ、グリッドビューが新しく変更されたデータで更新されます。

これは私のプレゼンテーションレイヤーでのイベントバスの実装からこのロジックを取り除き、プレゼンテーションレイヤー以外のレイヤーに影響を与えるこれらのデータ状態の一部を侵入する可能性があるため、したがって、これらのイベントのために中央のディスパッチ場所を持つことは有益です。

側注: 私はそれに優雅さを持っていると思うので、私は、このプロジェクト構造のオフに私のアプリを構築しましたが、それはすべて私がそれを希望の道を解決していません。 :https://github.com/android10/Android-CleanArchitecture

このご意見やご提案をいただければ幸いです。

答えて

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は単なるEnum要素です。

関連する問題