Wenn ich eine ereignisbasierte Komponente verwende, habe ich in der Wartungsphase häufig Schmerzen.
Da der ausgeführte Code vollständig aufgeteilt ist, kann es schwierig sein, den gesamten Codeteil zu ermitteln, der zur Laufzeit benötigt wird.
Dies kann zu subtilen und schwer zu debuggenden Problemen führen, wenn jemand neue Ereignishandler hinzufügt.
Bearbeiten von Kommentaren: Selbst mit einigen bewährten Methoden an Bord, z. B. einem anwendungsweiten Event-Bus und Handlern, die das Geschäft an einen anderen Teil der App delegieren, wird der Code in einem bestimmten Moment schwer lesbar, da viele vorhanden sind registrierte Handler von vielen verschiedenen Orten (besonders wahr, wenn es einen Bus gibt).
Dann beginnt das Sequenzdiagramm komplexer zu werden, der Zeitaufwand, um herauszufinden, was gerade passiert, nimmt zu und die Debugsitzung wird chaotisch (Haltepunkt auf dem Handler-Manager, während auf Handlern iteriert wird, besonders erfreulich bei asynchronen Handlern und einigen Filtern darüber).
////////////////
Beispiel
Ich habe einen Dienst, der einige Daten auf dem Server abruft. Auf dem Client haben wir eine Basiskomponente, die diesen Service über einen Callback aufruft. Um den Benutzern der Komponente einen Erweiterungspunkt zur Verfügung zu stellen und eine Kopplung zwischen verschiedenen Komponenten zu vermeiden, werden einige Ereignisse ausgelöst: eines vor dem Senden der Abfrage, eines, wenn die Antwort zurückkommt, und eines, wenn ein Fehler auftritt. Wir haben eine Grundmenge von Handlern, die vorregistriert sind und das Standardverhalten der Komponente liefern.
Jetzt können Benutzer der Komponente (und wir sind auch Benutzer der Komponente) einige Handler hinzufügen, um Änderungen am Verhalten vorzunehmen (Abfragen, Protokolle, Datenanalyse, Datenfilterung, Datenmassage, ausgefallene Benutzeroberflächenanimation, Verkettung mehrerer sequenzieller Abfragen) , was auch immer). Daher müssen einige Handler vor / nach anderen ausgeführt werden, und sie werden an vielen verschiedenen Einstiegspunkten in der Anwendung registriert.
Nach einer Weile kann es vorkommen, dass ein Dutzend oder mehr Handler registriert sind, und die Arbeit damit kann mühsam und gefährlich sein.
Dieser Entwurf entstand, weil die Verwendung der Vererbung zu einem völligen Chaos wurde. Das Ereignissystem wird bei einer Art Komposition verwendet, bei der Sie noch nicht wissen, was Ihre Kompositionen sein werden.
Ende des Beispiels
////////////////
Ich frage mich also, wie andere Leute diese Art von Code angehen. Sowohl beim Schreiben als auch beim Lesen.
Haben Sie Methoden oder Werkzeuge, mit denen Sie solchen Code ohne allzu große Schmerzen schreiben und warten können?