リアクティブ プログラミング (RxGroovy) を使用して、プロパティ値がデータベース クエリから取得されるビルダー パターンを使用してオブジェクトを作成しようとしています。まず、どうやってそれを行うか、そして次に、それが良いアイデアかどうかについての考えを探しています。
作成しようとしているオブジェクトは次のタイプです。
class Foo {
final String name;
final Long[] relatedIds;
Foo(String name, Long[] relatedIds) {
this.name = name;
this.relatedIds = relatedIds;
}
}
そしてビルダー:
class FooBuilder {
String name;
LinkedList<Long> relatedIds;
{
relatedIds = new LinkedList<>();
}
FooBuilder name(String name) {
this.name = name;
return this;
}
FooBuilder relatedId(Long id) {
this.relatedIds.add(id);
return this;
}
Foo build() {
return new Foo(this.name, this.relatedIds.toArray());
}
}
すべての Foo オブジェクトの名前を返すクエリと、関連するすべての ID を取得するために Foo オブジェクトごとに 1 回実行する別のクエリの 2 つのクエリがあります。
queryAsObservable
クエリを実行し、結果セットの各行を発行する Observable を取得するためのメソッド (それを呼び出す) が既にあります。を設定すると、次のname
ようになります。
Observable<FooBuilder> buidlersWithNameSet = queryAsObservable(queryAllFoos)
.map { return new FooBuilder().name(it.name); }
を指定するFooBuilder
と、次のように relatedIds を設定できます。
final FooBuilder builder;
queryAsObservable(queryRelatedIds, builder.name)
.subscribe { builder.relatedId(it.id); }
私の問題は、2つを結び付ける方法ですか?FooBuilder
示されているように、最初のオブザーバブルによって発行されたそれぞれについて、関連する ID を設定するためにオブザーバブルを作成するにはどうすればよいですか? 最後に、すべてのFooBuilder
オブジェクトを取得し、 プロパティname
とrelatedIds
プロパティをすべて設定する必要があります。
JOINに関する注意
JOIN を使用して、関連する ID と名前をすべて 1 つのクエリで取得できることを知っています。私の考えでは、すべての結果が到着するのを待ってからオブジェクトを順番に構築するのではなく、並行して実行される多くの小さなクエリを使用し、Observable ストリームを使用して結果が利用可能になるたびに各結果の作業を行うことができます。なぜそれが良いアイデアなのか悪いアイデアなのかについて、私は自由に考えています。