Как мне хранить объекты в магазине (ngrx, ngxs), которые имеют методы - PullRequest
0 голосов
/ 29 мая 2019

Я понимаю, что шаблон Redux требует, чтобы в Магазине хранился только простой объект (это логично и понятно).Однако в приложении я хотел бы использовать объекты, которые имеют некоторую функциональность, например, такие методы, как: "hasParent", "isReadonly", "isValid", которые рассчитываются.

Хотя, например, ngrx делаетНе запрещайте хранение таких объектов, это может привести ко многим проблемам

Как мне решить проблему хранения этих объектов?У меня есть две идеи: A) - прежде чем сохранить объект в хранилище, я сериализую объект в простые данные - при чтении из хранилища я сопоставляю простые данные с объектом (используя маппер или «вручную» (с помощью конструктора объекта)и сеттеры)) B) Я отказываюсь от использования классов / объектов, я использую только простые данные и перемещаю методы hasParent, isReadonly, isValid в помощники / службы.

Ни одно из этих решений не лишено недостатков:(. Но какое решение кажется лучше? Может быть, есть другие способы решения вышеуказанной проблемы?

1 Ответ

3 голосов
/ 29 мая 2019

Как хранить объекты в хранилище (ngrx, ngxs), которые имеют методы -> Вы не! Вы храните состояние в магазине. Функции не принадлежат государству. (Похоже, вы понимаете это в деталях вопроса, но я хочу еще раз указать на это)

Что касается необходимых вам функций:

  • только для чтения: в большинстве случаев это логический флаг объекта. Так что я не знаю, почему вы хотите использовать его как функцию. Если только для чтения в зависимости, например, на роль пользователя или другие внешние факторы, переместите его в «служебную функцию» и не храните ее в состоянии хранилища. Вы хотите сохранить состояние как можно меньше.
  • isValid: зачем хранить недопустимые данные в хранилище, которое затем потенциально используется другим компонентом? Лично я бы всегда считал данные внутри магазина действительными, но, возможно, есть вариант использования.
  • hasParent: я вижу это больше как "parentId", из которого вы можете получить фактический родительский объект с помощью вспомогательного метода. Но, не зная вашей структуры, я не могу сказать.

Прежде чем много думать об этом, спросите себя: действительно ли мне нужен магазин для этого. Не будет службы достаточно. Магазин - самая горячая вещь сейчас, но большинству приложений это не нужно! Не используйте его только потому, что все говорят об этом!

...