2016-11-04 46 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

很不错的!谢谢! –

相关问题