Имеет ли смысл нормализовать / денормализовать древовидные данные при проектировании состояния ngrx? - PullRequest
0 голосов
/ 06 октября 2018

Я создаю приложение todo со списком задач, которые также могут иметь суб Todos.Перед использованием ngrx моя модель выглядела так:

export interface Todo {
  id: string;
  title: string;
  isDone?: boolean;
  parentId?: string;
  subTodos?: [Todo];
}

<todo *ngFor="let todo of todoss$|async">
  <todo *ngFor="let subTodo of todo.subTodos"></todo>
</todo>

Это было удобно для отображения данных внутри представления, поскольку я мог использовать для этого вложенные *ngFor s.Поскольку логика редуктора для обновления подзадач немного усложнилась, я подумал об использовании сущностей.Но нормализация данных, кажется, идет с некоторыми компромиссами.Теперь мне нужно не только отфильтровать свои Todos, чтобы удалить подзадачи из основного списка, но и запросить данные для каждого отдельного SubTodo.Похоже, что для упрощения логики обновления делается много вычислений.

Модель выглядит следующим образом:

export interface Todo {
  id: string;
  title: string;
  isDone?: boolean;
  parentId?: string;
  subTodos?: [string]; // an Todo.id
}

Я много читал о ngrx, но не смог найти ни одного примерас такой структурой данных.Мне интересно, как бы вы решили эту проблему?Вы всегда нормализуете свои массивы и разделяете связанные модели?И если да, вы денормализуете данные, когда используете их в своих представлениях, или вы просматриваете их в обозначенных компонентах (что мне некрасиво)?А как вы проектируете интерфейсы, если так?Вы создаете два отдельных интерфейса для модели представления и модели состояния?

1 Ответ

0 голосов
/ 07 октября 2018

Вы должны иметь возможность иметь те же модели представления, что и раньше.

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

...