9

私は React の使用方法について独自の意見を持っており、Om に触発されて独自のフレームワークを構築しています。私は Flux アーキテクチャに少し似たものを実装しており、ストアはいくつかのイベントで自分自身を更新できます。

よくわからないのは、なぜ Flux アーキテクチャでストアの依存関係が必要なのかということです。

ストアは、CQRS アーキテクチャの場合のように、特定の境界付けられたコンテキストの自己完結型のデータ ホルダーになることは想定されていませんか?

イベント システムでは、2 つの CQRS コンポーネントが同じデータを保持することになります。重複データをストアに保持しないように、ストアの依存関係を表現していますか?

ストアの依存関係が必要で、他の方法ではほとんど問題を解決できない非常に具体的な使用例を誰か思いつくことができますか? 私は自分自身を見つけることができません。

4

2 に答える 2

4

1は順次waitForデータフロー用、もう1つは並列データフロー用です。同じデータを保持しないようにデータ ストアをモデル化しようとしています (つまり、二重のメンテナンス データ)。

基本的に、データ ストアは CQRS コンポーネントであり、2 つのデータ ストアが同じ種類のデータになることを避けるようにしています。一部のコンポーネントのみが必要とするデータを何らかの方法で変換する必要がある場合は、それを「集約」データ ストアに分割します。単純な実装:

var carsStore = Reflux.createStore({
    init: function() {
        this.listenTo(Actions.updateCars, this.updateCallback);
    },
    updateCallback: function() {
        $.ajax('/api/cars', {}).done(function(data) {
            this.trigger(data.cars);
        }.bind(this));
    }
});

をリッスンすることで、データを集約する別のデータ ストアを作成できますcarsStore

var modelsStore = Reflux.createStore({
    init: function() {
        this.listenTo(carsStore, this.carsCallback);
    },
    carsCallback: function(cars) { // passed on from carsStore trigger
        this.trigger(this.getModels(cars)); // pass on the models
    }
    getModels: function(cars) {
        return _.unique(_.map(cars, function(car) { return car.model; }));
    }
});

そうすれば、React ビュー コンポーネントは 1 つを使用して車を取得し、もう 1 つを使用してモデルを取得できます。モデルは から集約されますcarStore

ストアが 2 つの並列データ ストリームが完了するのを待つ必要がある場合、Reflux.allアクションとストアを結合する を提供します。これは、別の REST リソースからデータがロードされるのを待っている場合などに便利です。

var carsAndPartsAreLoaded = Reflux.all(carStore, partsStore);

// you may now listen to carsAndPartsAreLoaded 
// from your data stores and components

これがあなたにとって理にかなっていることを願っています。

于 2014-08-11T14:26:14.317 に答える