Même si votre question est principalement opinion, je peux vous donner quelques idées de pourquoi ngrx est un bon choix. Malgré que les gens en disant que ce n'est pas une bonne idée d'avoir toutes les de votre état de l'application dans un objet unique (un Seul État de l'Arbre). Cependant, à mon avis, votre état sera là, peu importe. Avec un magasin, c'est juste tout en une fois à l'endroit et les mutations sont explicites et suivis vs jonché partout et conservées localement par les composants. En outre, vous sélectionnez les propriétés spécifiques de votre magasin au sein de votre application, de sorte que vous pouvez sélectionner uniquement les données qui vous intéressent. Ensuite, si vous embrassez l'immuabilité dans votre réducteurs en retournant toujours un tableau, par exemple) et l'utilisation des Observables, vous pouvez faire usage de la ChangeDetectionStrategy OnPush
. OnPush
vous donne un bon boost de performance. Prenons un oeil à la figure suivante pris de l'officiel Angulaire docs:
Comme vous pouvez le voir, Angulaire Application est construite à l'aide d'un composant de l'architecture, ce qui résulte en une composante de l'arbre. OnPush
sur un composant signifie que seulement si l'entrée modification des attributs, la détection de changement de scène. Par exemple, si Child B
est OnPush
et Child A
est Default
et vous changer quelque chose à l'intérieur d' Child A
, Child B
s'changer de détecteur ne sera pas déclenché car aucun des attributs d'entrée ont changé. Toutefois, si vous modifiez quelque chose à l'intérieur d' Child B
, Child A
sera ré-rendu, car il a le défaut, remplacez le détecteur.
Autant sur les performances et le seul état de l'arbre. Un autre avantage de la banque est que vous pouvez réellement raison au sujet de votre code et les modifications de l'état. Donc, la réalité de la plupart Angulaire 1.x apps est à la portée de la soupe. Voici un joli graphique à partir d'un post de blog par Lukas Ruebbelke:
La photo montre assez bien. Un autre article de Tero Parviainen parle de comment il a amélioré ses Angulaire des applications en interdisant ng-controller
. Que tout se rapporte à l'étendue de la soupe et de la gestion de la perpétuelle évolution est une tâche difficile. L' redux
motivation est dit ce qui suit , voir ici:
Si un modèle peut mettre à jour un autre modèle, une vue peut mettre à jour un modèle,
qui met à jour un autre modèle, et ce, à son tour, pourrait provoquer une autre
vue de la mise à jour. À un certain point, vous n'avez plus à comprendre ce qui se passe
dans votre application comme vous l'avez perdu le contrôle sur le quand, le pourquoi, et le comment de
son état. Lorsqu'un système est opaque et non-déterministe, il est difficile de
reproduire les bugs ou ajouter de nouvelles fonctionnalités.
En utilisant ngrx/magasin, vous pouvez réellement obtenir autour de ce problème, car vous aurez un clair de flux de données dans votre application.
Depuis ngrx est fortement inspiré par redux, je dirais que les mêmes principes s'appliquent:
- Source unique de la vérité
- L'état est en lecture seule
- Des modifications sont apportées avec les fonctions pures
Donc, à mon avis, le plus grand avantage est que vous êtes en mesure de suivre facilement l'interaction de l'utilisateur et de la raison sur les modifications de l'état parce que vous l'expédition des actions et ceux qui conduisent toujours à un endroit alors qu'avec la plaine de modèles, vous devez trouver tous les refernces et de voir ce qui change quoi et quand.
À l'aide de ngrx/store vous permet également d'utiliser devtools de voir le débogage de votre état de conteneurs et d'annuler les changements. Voyage dans le temps, je suppose, a été l'une des principales raisons pour redux et c'est assez difficile si vous utilisez de la plaine de vieux modèles.
La testabilité @muetzerich déjà mentionné est également un avantage de l'utilisation de ngrx/store. Les réducteurs sont de pures fonctions et les fonctions sont faciles à tester, parce qu'ils ont une entrée et simplement le retour d'une sortie et ne dépend pas des propriétés à l'extérieur de la fonction et n'ont pas d'effets secondaires, par exemple http appels, etc.
Pour passer à la ligne de fond, je dirais que n'avez pas besoin d'utiliser ngrx/store pour effectuer l'une de ces choses, mais vous serez lié à des restrictions (les trois principes mentionnés ci-dessus), qui fournissent un modèle commun et apporter de belles prestations.
Pour vos questions:
Ai-je besoin de plusieurs magasin pour mon application si j'ai plusieurs type de données (stocks, commandes, clients...)?
Non, je ne le suggèrent d'utiliser plusieurs magasins.
Comment puis-je structure (conception) de mon application à traiter avec de multiples types de données comme celle-ci?
Peut-être que ce post de blog par Tero Parviainen vous aide à comprendre comment la conception de votre magasin. Il explique comment la conception de l'état de l'application de l'arbre pour un exemple d'application.