2016-11-04 47 views
0

我有這個動作:我該如何改進這個redux動作創建器?

import uuid from 'uuid' 
import { findPaymentCategoryByName } from './Categories/selectors' 
import { addPaymentCategory } from './Categories/actions' 

export const addPayment = payment => (dispatch, getState) => { 
    const id = uuid.v1() 
    const { paymentCategory, ...paymentValues } = payment 
    let existentPaymentCategory = findPaymentCategoryByName(getState(), paymentCategory.name) 

    if(!existentPaymentCategory) { 
    existentPaymentCategory = dispatch(addPaymentCategory(paymentCategory)).payload 
    } 

    dispatch({ 
    type: 'ADD_PAYMENT', 
    payload: { payment: { ...paymentValues, id, paymentCategoryId: existentPaymentCategory.id }} 
    }) 
} 

他的行爲創建了一個付款。當類別不存在時,它被創建。

但我讀到,在行動中更改兩個商店並不好。所以,任何人都知道我該如何改進這一行動?

回答

1

您可以遵循以下原則:「Tell-Don't-Ask」 「findPaymentCategoryByName」方法可以稱爲「paymentCategoryByName」,如果它不存在,他自己負責創建類別。

更多TellDontAsk這裏的細節: http://martinfowler.com/bliki/TellDontAsk.html

export const addPayment = payment => (dispatch, getState) => { 
    const id = uuid.v1() 
    const { paymentCategory, ...paymentValues } = payment 
    let existentPaymentCategory = PaymentCategoryByName(getState(), paymentCategory.name) 

    dispatch({ 
    type: 'ADD_PAYMENT', 
    payload: { payment: { ...paymentValues, id, paymentCategoryId: existentPaymentCategory.id }} 
    }) 
} 
+0

很不錯的!謝謝! –

相關問題