Welche Vorteile bietet die Verwendung von store (ngrx) in angular 2?
Arbeite ich an einem Winkel-1.x.x Projekt und darüber nachdenken, meinen code zu Winkel 2.
Nun in meinem Projekt habe ich viele Dienste(Fabrik) für die Handhabung von Daten, die fast immer Daten in js arrays(beide cache und Speicher) und die Verarbeitung dieser Daten durch mit Unterstrich für die Handhabung von arrays.
Fand ich, dass viele Beispiele in angular2 mit ngrx.
Was sind die Vorteile der Verwendung von speichern, vergleichen, nutzen, Daten-Dienste, um Daten zu behandeln?
Brauche ich mehrere Informationsspeicher für meine app, wenn ich mehrere Daten Typ (Lager -, Auftrags -, Kunden...)?
Wie kann ich die Struktur (design) meine app, um sich mit mehreren Daten-Typen wie diesen?
InformationsquelleAutor der Frage Vu Quyet | 2016-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl deine Frage ist in Erster Linie auf Meinungen basierende, ich kann Ihnen einige Ideen, warum ngrx ist eine gute Wahl. Trotz Menschen, die sagen, dass es nicht eine gute Idee, alle Ihre, den Zustand der Anwendung in einem einzigen Objekt (Einzel-Zustand-Baum). Jedoch, meiner Meinung nach dein Zustand wird es unabhängig. Mit einem Geschäft ist es gerade alle auf einmal spot und Mutationen sind explizite und verfolgt vs übersät, überall und lokal gepflegt von Komponenten. Zusätzlich wählen Sie bestimmte Eigenschaften von Ihrem Geschäft innerhalb Ihrer Anwendung, so können Sie nur Daten auswählen, die Sie interessieren. Wenn Sie dann umarmen Unveränderlichkeit in Ihrem Reduzierstücke immer durch die Rückgabe eines array-Instanz und verwenden Observablen, können Sie Gebrauch machen von der ChangeDetectionStrategy
OnPush
.OnPush
gibt Ihnen einen schönen performance-boost. Werfen wir einen Blick auf die folgende Abbildung, entnommen aus der offiziellen Winkel docs:Wie Sie sehen können, ein Eckiges App ist gebaut, mit einer Komponente einer Architektur, die Ergebnisse in einer Komponente Baum.
OnPush
auf einer Komponente bedeutet, dass nur, wenn input-Parametern ändern, die change detection wird kick in. Zum Beispiel, wennChild B
istOnPush
undChild A
istDefault
und Sie ändern etwas inChild A
Child B
's ändern Detektor wird nicht ausgelöst, da kein input-Parametern geändert haben. Jedoch, wenn Sie ändern etwas inChild B
Child A
wird neu gerendert, da es die Standardeinstellung ändern Detektor.So viel über die performance und die einzige Staatliche Struktur. Ein weiterer Vorteil für den Shop ist, dass Sie tatsächlich Grund über deinen code und der Zustand ändert. Also ist die Realität der meisten Winkel-1.x-apps ist Geltungsbereich Suppe. Hier ist eine schöne Grafik von einem blog-post von Lukas Ruebbelke:
Das Bild zeigt es ziemlich gut. Ein weiterer Artikel von Tero Parviainen spricht darüber, wie er verbessert seine Eckige apps durch das Verbot
ng-controller
. Das bezieht sich alles auf den Umfang der Suppe und der Verwaltung von ständig wechselnden Zustand ist schwierig. Dieredux
motivation sagt der folgende siehe hier:Mithilfe ngrx/store können Sie tatsächlich bekommen, um dieses problem, denn Sie erhalten eine klare Datenfluss in Ihrem app.
Seit ngrx ist stark inspiriert von redux, würde ich sagen, dass die gleichen die wichtigsten Grundsätze gelten:
Also, meiner Meinung nach der größte Vorteil ist, dass Sie in der Lage, leicht verfolgen Benutzer-Interaktion und Grund über Zustand ändert, weil Sie Versand-Aktionen, und diese führen immer zu einer Stelle in der Erwägung, dass mit einfachen Modellen, die Sie finden müssen, um alle Referenzen und sehen Sie, was ändert sich, was und Wann.
Mit ngrx/store können Sie auch verwenden devtoolsum zu sehen, Debuggen Zustand-container und können änderungen rückgängig machen. Zeit zu Reisen, denke ich, war einer der Hauptgründe für die redux und das ist ziemlich schwer, wenn Sie mit einfachen alten Modelle.
Testbarkeit, da @muetzerich bereits erwähnt, ist auch ein Vorteil der Verwendung von ngrx/speichern. Reduzierstücke sind Reine Funktionen und die Funktionen sind einfach zu testen, weil Sie nehmen eine Eingabe und schicken Sie einfach eine Ausgabe und nicht abhängig von Eigenschaften außerhalb der Funktion und haben keine Nebenwirkungen, wie z.B. http-Aufrufe etc.
Springen Sie in die untere Zeile, ich würde sagen, die brauchen nicht zu verwenden ngrx/store, um alle diese Dinge tun, aber Sie werden gebunden an die Beschränkungen (die drei oben genannten Prinzipien), die ein gemeinsames Muster und bringen schöne Vorteile.
Zu deinen Fragen:
Brauche ich mehrere Informationsspeicher für meine app, wenn ich mehrere Daten Typ (Lager -, Auftrags -, Kunden...)?
Nein, ich würde nicht empfehlen, verwenden Sie mehrere Geschäfte.
Wie kann ich die Struktur (design) meine app, um sich mit mehreren Daten-Typen wie diesen?
Vielleicht blog-post von Tero Parviainen hilft Ihnen herauszufinden, wie Sie Ihre design-store. Er erläutert, wie die Anwendung zu entwerfen Zustand Baum für eine Beispiel-app.
InformationsquelleAutor der Antwort LordTribual
Eine schöne Erklärung über das benefis mit einem store finden Sie dort Dokumentation
Zentrale, Unveränderliche Zustand
Alle relevanten Status der Anwendung existiert, in einem Ort. Dies macht es einfacher auf die Spur zu Problemen, als eine Momentaufnahme der Zustand zum Zeitpunkt eines Fehlers kann wichtige Einblicke und machen es einfach, Probleme neu erstellen. Dies macht auch notorisch schwer zu lösenden Problemen wie undo/redo-trivial-in den Kontext einer Anwendung Speichern und leistungsfähige Werkzeuge.
Leistung
Denn der Staat ist zentral an der Oberseite der Anwendung, Daten-updates können nach unten fließen durch Ihre Komponenten, die sich auf Scheiben speichern. Winkel-2 ist gebaut, um zu optimieren, die auf solchen Daten-flow-Anordnung, und deaktivieren können, ändern Sie die Erkennung in Fällen, in denen Komponenten sind abhängig von Observablen, die nicht emittiert, die neuen Werte. In einem optimalen Shop-Lösung dies wird die überwiegende Mehrheit Ihrer Komponenten.
Testbarkeit
Alle Status-updates gehandhabt werden-Reduzierer, die reinen Funktionen. Reine Funktionen sind extrem einfach zu testen, wie es ist, geben Sie einfach in, behaupten, gegen Ausgabe. Dies ermöglicht die Prüfung der wichtigsten Aspekte der Anwendung, ohne verspottet, Spione, oder andere tricks, die das testen sowohl Komplex und fehleranfällig.
Mehrere Filialen?
IMO verwenden Sie eine Shop und fügen Sie Ihre Daten Typen als Eigenschaften in Ihrem Geschäft.
InformationsquelleAutor der Antwort muetzerich
ngrx.speichern tut das, was eine gut gestaltete Komponente/Dienst tun wird, mit zusätzlichen Vorteilen. So weit, und ich bin früh in die Arbeit, wie dies zusammen kommt, das ist, was ich gefunden habe:
Es ist wirklich einfach ein wartbaren mit Chaos-Dienste und-Komponenten. Wenn Sie kaskadierenden Aktionen, komplexe Daten, Interaktionen und Anrufe an remote-Standorten, die Sie bis Ende der Strukturierung einen service, der nahezu identisch ist mit dem action-reducer-store Anordnung in ngrx. Die kleinen reinen Funktionen, observablen, etc. ngrx hat es schon, warum nicht nutzen und Gewinn aus den Gedanken und Muster, die es repräsentiert.
Wenn Kräfte/fördert das denken in kleinen testbaren Funktionen. Zu legen, einen Druckminderer oder mehrere Reduzierstücke für einen mäßig komplexen Komponente erzwingt eine Disziplin, entfernen Sie so viele Stunden verbrauchen Fallstricke. Nichts schluckt, Stunden wie das aufspüren einer quasi-Multithreading-race-Bedingung, die sich aus der Rückruf-queue. Ich bin sicher, dass dies passieren kann, mit Reduzierstücke, aber es vereinfacht den Zugriff auf die Anruf-Sequenz und Zustand für das Debuggen.
Den Angular2 Muster wird einfacher. Vorlagen mit display Logik-Komponenten als ein Treffpunkt für alle, die bits und Stücke, die die Vorlage benötigt. Dienstleistungen werden einfacher, da Sie einfach remote-Aufrufe oder verarbeiten der io für die Daten, egal von wo es kommt. Dann die Aktionen und Reduzierungen für die Aufrechterhaltung und Veränderung des Staates auslöst, alle anderen Teile reagieren auf den neuen Staat. Ich fand, dass mit component/service-Muster-entweder man würde beginnen immer groß und kompliziert, mit der Nebenwirkung der es immer extrem schwierig zu Debuggen. Meine Dienste wurden Ende der Speicherung den Staat und macht die Daten-io.
Observablen. Alles ist ein beobachtbares in rxjs.store, und das ist die Grundlage für eine ansprechende app. Strukturierung des app-Zustands als ein beobachtbares, manchmal ein wenig undurchsichtig und nicht sehr einfach, aber es herauszufinden und tun es auch zahlt große Dividenden weiter unten auf der Linie.
Das einzige negative, dass ich sehen kann, ist, dass die Reduzierstücke außerordentlich großen sehr schnell. Es scheint viele Situationen, in denen der gleiche code mit verschiedenen Namen wiederholt, und wiederholt. Mein Gehirn schreit "- Funktion mit Parametern', aber es funktioniert nicht so. Auf der anderen Seite, das ist, wo die Struktur und den Zustand der app ist ausgedrückt in alle Details, so ist es verpflichtet, viele es. Und wenn etwas schief geht, wie es unvermeidlich wird, die eine Reine Funktion als Quelle des Problems macht es leichter aufzuspüren und zu beheben.
InformationsquelleAutor der Antwort Derek Kite