Als Fortsetzung des
vorherigen Artikels über den allgemeinen Status für Komponenten werde ich das Thema weiterentwickeln und eine Funktion implementieren, die ein Statusänderungsereignis in jeder Komponente abfängt und verarbeitet (wenn sich Daten im allgemeinen Status in einer Komponente ändern).
Link zum ProjektUm Datenänderungen in einer Komponente zu verfolgen, wird normalerweise eine direkte Verbindung hergestellt, dh wir überprüfen entweder in der Update-Methode, ob sich die Daten dort geändert haben
Überprüfen Sie die Daten vorab über die Update-Methodeoder wir abonnieren ein ganz bestimmtes Ereignis, das in der "verfolgten" Komponente unabhängig aufgerufen und später verarbeitet wird.
Ein Ereignis in einer Komponente abonnieren und verarbeitenDieser Ansatz weist viele Mängel auf, die meist in einem früheren Artikel beschrieben wurden. Der Hauptgrund für diese Mängel ist eine starke Kohärenz und komplexe Wartung (die Fähigkeit, ein Projekt zu unterstützen, zu entwickeln und umzugestalten).
Erstellen einer Statusbenachrichtigungslösung
Nachdem Sie nun über ein System verfügen, mit dem Sie die Verbindung zwischen Komponenten lösen und Mailings zwischen Komponenten erstellen können, können Sie die manuelle Überprüfung von Werten im allgemeinen Zustand wie folgt vermeiden:
Allgemeines Benachrichtigungsschema für StatusänderungenIn der im vorherigen Artikel beschriebenen Implementierung werden die Daten an einer Stelle im Indexer der SharedState-Komponente geändert, und daher ist es sehr einfach, ihre Änderung zu steuern
Indexer im AllgemeinzustandIm Setter des Indexers weisen wir Statuswerte zu.
Jetzt müssen Sie für die
SharedState- Komponente eine Abhängigkeit von
SharedEvents hinzufügen , da ich sie zum Senden von Benachrichtigungen verwenden werde. Attribut für
SharedState hinzufügen.
Hinzufügen einer SharedState-Abhängigkeit von SharedEventsErstellen Sie eine Klasse, die von EventData erbt, um Daten in einer Statusbenachrichtigung zu senden. Es enthält den Namen des Parameters im Status und seinen neuen Wert
Hinzufügen einer Klasse, die Informationen zu einer Änderung des allgemeinen Status enthältJetzt müssen Sie einen Link zu
SharedEvents hinzufügen , um ihn vom Spielobjekt in der
SharedState- Komponente
abzurufen
SharedEvents in einer SharedState-Komponente abrufenJetzt ändern wir den Setter des Indexers so, dass bei jeder Änderung des Status eine Benachrichtigung mit dem Namen "sharedstatechanged" erstellt wird und wir ein Objekt übergeben, das alle Daten über die Änderung enthält
Ändern Sie den Indexer-SetterJetzt müssen Sie die Änderungen in einer Komponente abonnieren, die Daten in einer anderen ändern und überprüfen, wie sie funktionieren.
Angenommen , die
SecondComponent ändert den Status, z. B. den Parameter "somedata", und die
FirstComponent- Komponente überwacht die
Statusänderung , indem sie Benachrichtigungen abonniert
In
SecondComponent rufen
wir die Parameteränderung auf
Datenanruf ändernUnd jetzt
fügen wir in der
FirstComponent- Methode einen Handler hinzu und
drucken Informationen über die Änderung des allgemeinen Status zur Konsole
Allgemeine Behandlung von StatusänderungsereignissenWenn Sie nun das Spiel starten, nachdem der allgemeine Status in
SecondComponent geändert wurde, erhalten wir in der
FirstComponent- Komponente eine Benachrichtigung und geben die Daten an die Konsole aus

Jetzt, da dies funktioniert, können Sie ein wenig umgestalten und den Code noch komfortabler gestalten. Dazu müssen Sie das Abonnement für Benachrichtigungen über Änderungen des allgemeinen Status an die
SharedStateComponent- Basisklasse übertragen und eine abstrakte Methode erstellen, indem Sie nach Ermessen der Komponente implementieren, welche Komponenten
Statusänderungen darin verarbeiten oder nicht.
Übertragen eines Abonnements auf
SharedStateComponent
Abonnieren von Benachrichtigungen über Änderungen des allgemeinen Status in der BasisklasseFügen Sie eine abstrakte Methode hinzu und rufen Sie sie im Ereignishandler auf
Hinzufügen einer abstrakten Methode zur Behandlung des Ereignisses in untergeordneten KlassenUnd jetzt müssen Sie in jeder
untergeordneten Komponente von
FirstComponent und
SecondComponent diese Methode implementieren und die Änderung des allgemeinen Status darin verarbeiten. Aber wir werden es einfach wie zuvor auf die Konsole drucken
Implementieren einer abstrakten Methode in FirstComponent- und SecondComponent-KomponentenUnd jetzt, wenn wir das Spiel starten, sehen wir 2 Einträge in der Konsole von beiden Komponenten.

Wichtig!
In der vorherigen Implementierung gab es einen Fehler in der
SharedEvents- Klasse.
Um diesen Fehler zu beheben, müssen Sie die
Subscribe- Methode in
Folgendes ändern:
