Problem
Ich habe kürzlich viel darüber gelesen, dass Singletons schlecht sind und wie die Abhängigkeitsinjektion (die ich als "Verwenden von Schnittstellen" verstehe) besser ist. Als ich einen Teil davon mit Callbacks / Interfaces / DI implementierte und mich an das Prinzip der Schnittstellentrennung hielt, war ich ziemlich durcheinander.
Die Abhängigkeiten eines übergeordneten UI-Elements, in denen im Grunde alle seiner untergeordneten Elemente zusammengefasst sind. Je weiter oben in der Hierarchie ein UI-Element liegt, desto aufgeblähter ist sein Konstruktor.
Ganz oben auf der UI-Hierarchie befand sich eine Anwendungsklasse, die Informationen zur aktuellen Auswahl und einen Verweis auf ein 3D-Modell enthielt, das Änderungen widerspiegeln muss. Die Anwendungsklasse implementierte 8 Schnittstellen, und dies war nur ein Fünftel der kommenden Produkte (/ Schnittstellen)!
Ich arbeite derzeit mit einem Singleton, der die aktuelle Auswahl und die UI-Elemente enthält und eine Funktion hat, um sich selbst zu aktualisieren. Diese Funktion durchsucht den UI-Baum und die UI-Elemente und greift dann nach Bedarf auf den aktuellen Auswahl-Singleton zu. Der Code erscheint mir auf diese Weise sauberer.
Frage
Ist ein Singleton vielleicht für dieses Projekt geeignet?
Wenn nicht, gibt es einen grundlegenden Fehler in meinem Denken und / oder in der Implementierung von DI, der es so umständlich macht?
Zusätzliche Informationen zum Projekt
Typ: Einkaufskorb für Apartments mit Schnickschnack
Größe: 2 Mannmonate für Code und Benutzeroberfläche
Wartung: Keine laufenden Updates, aber möglicherweise "Version 2.0" später
Umgebung: Verwenden von C # in Unity, das eine Entität verwendet Komponentensystem
In fast allen Fällen löst die Benutzerinteraktion mehrere Aktionen aus. Zum Beispiel, wenn der Benutzer ein Element auswählt
- Der UI-Teil, der dieses Element und seine Beschreibung zeigt, muss aktualisiert werden. Dazu muss es auch einige Informationen von einem 3D-Modell erhalten, um den Preis zu berechnen.
- Weiter oben in der Benutzeroberfläche muss der Gesamtpreis aktualisiert werden
- Eine entsprechende Funktion in einer Klasse eines 3D-Modells muss aufgerufen werden, um die Änderungen dort anzuzeigen