2017-10-10 9 views
0

私は、角度プロジェクトにngrxを追加しようとしています。私はまだサービスが必要かどうかはわかりません。コンポーネントはアクションをディスパッチできるためです。これは、ngrx/store以外のサービスを使用する必要はないということですか?ngrx/storeとエフェクトを使用する場合のサービスの使用方法は?

+0

サービスはまだ使用できますが、本当に必要はありません。アクションをディスパッチするときは、サービスメソッドを呼び出すのではなく、 '@ ngrx/store'にメッセージを送ります。 – pixelbits

答えて

1

私はまだ論理をカプセル化するためにサービスを使用します。一般に、コンポーネントはサービスと通信し、サービスはストアと通信します。

私は、サービスが単に格納するだけではないということの範囲を発見しました。そのため、サービスを削除すると、ストアコンポーネントにビジネスロジックが多すぎます。私の店は、このパターンでは

static INITIALIZE_CONFIG_REQUEST = 'INITIALIZE_CONFIG_REQUEST'; 
    static INITIALIZE_CONFIG_SUCCESS = 'INITIALIZE_CONFIG_SUCCESS'; 
    static INITIALIZE_CONFIG_FAILED = 'INITIALIZE_CONFIG_FAILED'; 
    static INITIALIZE_CONFIG_TEMPLATE_ERROR = 'INITIALIZE_CONFIG_TEMPLATE_ERROR'; 

    createInitializeConfigRequest() { // separate from invoking call for easier testing 
    return { 
     type: ConfigActions.INITIALIZE_CONFIG_REQUEST, 
     httpRequest: { 
     url: 'api/path/to/config', 
     successAction: this.createInitializeConfigSuccess, 
     failedAction: this.createInitializeConfigFailed, 
     validateResponse: (data) => this.checkTemplate(data) 
     } 
    }; 
    } 
    initializeConfigRequest() { // called by config.service 
    this.store.dispatch(this.createInitializeConfigRequest()); 
    } 

    createInitializeConfigSuccess(data) { 
    const payload = data; 
    return { 
     type: ConfigActions.INITIALIZE_CONFIG_SUCCESS, 
     payload 
    }; 
    } 

    createInitializeConfigFailed(error) { 
    return { 
     type: ConfigActions.INITIALIZE_CONFIG_FAILED, 
     payload: { 
     error 
     } 
    }; 
    } 

例えば、短いし、テストしやすいシンプルなAPIのような行動に焦点を当てている

、私はより簡単に、このようなことがHttpRequestをし、上記のレスポンスの検証を処理するようミドルウェアを追加することができます。

ほとんどの削減は、ペイロードプロパティがストアプロパティに正確に対応すると仮定する単一の汎用レデューサを介して行われます。これは私の好きな大会です。なぜなら、n個の減速材のn回の繰り返しテストの代わりに、一般的な減速材の包括的なテストが1セット用意されているからです。

genericActionHandler(state, action) { 
    if (!action.payload) { 
     return state; 
    } 
    const newState = {...state}; 
    Object.assign(newState, action.payload); 
    return newState; 
    } 

私のアーキテクチャに対する感触を与える希望。

関連する問題