Welche bewährten Verfahren gibt es, um die Interaktion zwischen komplexen Komponenten in Ihrer Ansicht zu orchestrieren?
Ich spreche nicht von einfachen Widgets wie einem Kombinationsfeld oder einem Grid-Steuerelement, sondern von Komponenten, die aus mehreren Widgets bestehen und die es verdienen, einzeln getestet zu werden.
Würden Sie das tun?
- Definieren Sie abstrakte Schnittstellen für jede Komponente,
lassen Sie den Controllersie über Dependency Injection miteinander verbinden, damit sie über Methodenaufrufe direkt miteinander kommunizieren können? Die Komponenten kennen also die Schnittstellen der anderen Komponenten. - Definieren Sie Ereignisse, die jede Komponente auslösen kann und
lassen Sie den Controllersie direkt über Ereignislisten aneinander koppeln? Die Komponenten haben daher Ereignisbehandler, die an die Ereignissenken anderer Komponenten angeschlossen sind. - Definieren Sie abstrakte Schnittstellen für jede Komponente, definieren Sie Ereignisse, die sie auslösen können, und
lassen Sie den Controllerauf alle Ereignisse hören und Methodenaufrufe an den Schnittstellen durchführen? Die Komponenten sind daher gegenüber anderen Komponenten völlig unabhängig. - Eine klassische Anwendung des Observer-Musters?
- Sonst noch etwas?
更新しました。 Ich habe "let the Controller ..." aus #1-3 gestrichen, weil es nicht unbedingt der Controller ist, der in diesen Fällen das Routing/die Orchestrierung durchführen muss. Es könnte die Ansicht selbst sein.
Ich habe die Methode Nr. 3 in einem aktuellen Projekt angewandt und war mit der Entkopplung und der individuellen Testbarkeit der Komponenten zufrieden. Ich habe jedoch das Gefühl, dass ich die Verdrahtung der Komponenten rationalisieren könnte. In meinem Fall muss das Haupt-View-Objekt mehrere Event-Listener für jede Komponente hinzufügen und dann Methoden für die entsprechenden Komponenten aufrufen, nachdem es manchmal einige lokale Verarbeitungen vorgenommen hat (z. B. Gespräche mit dem Model). Der Code für das Hinzufügen der Ereignishandler sieht etwas unübersichtlich aus, und ich bin vor allem auf der Suche nach einer sauberen Möglichkeit, das zu tun.