Нормализация вложенных ответов в ngrx

#angular #normalization #ngrx

#angular #нормализация #ngrx

Вопрос:

Я довольно новичок в ngrx, и я не уверен, каковы наилучшие практики в отношении нормализации вложенных объектов.

Допустим, хранилище определено следующим образом:

 export interface User {
   id: string;
   name: string;
   surname: string;
}

export interface Transaction {
    id: string;
    amount: number;
    owners: []
}

export interface TransactionState {
    ids: string[];
    entities: { [id: string]: Transaction }
}

export interface UserState {
   ids: string[],
   entities: { [id: string]: User }
}

export interface CapitalState {
  transactions: TransactionState;
  users: UserState;      
}
  

Первый способ, которым я подумал о реализации этого, заключается в том, что данные нормализуются, а затем отправляются два действия для обновления пользователей и транзакций

 @Effect()
transactions$ = this.actions$.pipe(
   ofType(fromTransactionsActions.TransactionsActionTypes.LoadTransactions),
   concatMap((action: fromTransactionsActions.LoadTransactions) =>
      this.transactionsService.loadTransactions(action.payload).pipe(
         map((tranactions: TransactionView) => {
             //Normalize Data
             return [ //Dispatch Transactions Load Success
                      //Dispatch Users Load Success];
         }),
         catchError(error => of(new fromTransactionsActions.TransactionsLoadFailure("")))
        ))
    )
  

Второй способ заключается в отправке нормализованных данных в одном успешном действии загрузки транзакции, а затем в обновлении состояния оттуда.

 export function reducer(state = initialState, action: TransactionsActions): CapitalState {
    switch (action.type) {
        case TransactionsActionTypes.AllotShareCapitalSuccess:
            return {
                ...state,
                transactions: { ...state.transactions, ...action.payload.entities.transactions },
                users: { ...state.users, ...action.payload.entities.users },
                error: ''
            };
  

Я не уверен, являются ли это лучшими практиками или я чего-то не хватает. Есть ли какой-либо из этих хороших способов сделать это? Есть ли способы получше?

Комментарии:

1. Вы загружаете все из одного вызова службы?

2. Нет, но в некоторых сообщениях действительно есть вложенные объекты, которые возвращаются только при их создании. Этот пример, вероятно, не самый лучший, поскольку вы ожидаете, что пользователи будут запрашиваться в отдельном вызове.