#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. Нет, но в некоторых сообщениях действительно есть вложенные объекты, которые возвращаются только при их создании. Этот пример, вероятно, не самый лучший, поскольку вы ожидаете, что пользователи будут запрашиваться в отдельном вызове.