Das ist ein Problem, dem ich oft gegenüberstehe, wenn ich eine neue App entwerfe Ich werde ein Beispielproblem verwenden, um dies zu erklären
denke, ich schreibe ein einfaches Spiel.so ich möchte eine Liste von Spielern halten. Ich habe wenige Optionen ..
1.Verwenden Sie ein statisches Feld in einer Klasse
%Vor%
aber das ist ein globaler Zustand
2.oder ich kann ein Singleton verwenden
%Vor%
aber das ist schlecht, weil es ein Singleton
ist3. Abhängigkeitsinjektion
%Vor%
Das scheint gut, aber es ist nicht so, wenn irgendein Objekt außerhalb des Spiels auf PlayerList schauen muss (was der übliche Fall ist) Ich muss eine der obigen Methoden verwenden, um die Game-Klasse global verfügbar zu machen. also füge ich einfach eine weitere Ebene zum Problem hinzu . hat eigentlich nichts gelöst.
Was ist die optimale Lösung? (Derzeit verwende ich Singleton-Ansatz)
Die Idee hinter der Abhängigkeitsinjektion ist, wie der Name angibt, Abhängigkeiten zu injizieren. Also, welches Objekt auch immer über die Spielerliste wissen muss, wird damit injiziert. In der Regel ist es sinnvoll, die Abhängigkeitsinjektion so umfassend wie möglich zu verwenden, bevor Sie in Abhängigkeitsnachfragen oder andere Mechanismen wechseln. Dies wird es auch ermöglichen, das Spiel später zu erweitern, um verschiedene Spielerlisten für verschiedene Levels oder welche Erweiterungen Sie auch immer haben möchten.
Wenn Sie PlayerList außerhalb des Spiels benötigen, ist das Spiel vielleicht die falsche Klasse? Wenn ein anderes Objekt PlayerList benötigt, muss entweder die Liste ebenfalls eingefügt werden oder Sie sollten die Liste in diese Klasse anstatt in die Game-Klasse verschieben.
Wenn Sie unterschiedliche Lebensdauern für Game, PlayerList und andere Klassen haben, sollten Sie vielleicht auch eine Factory verwenden, um sie zu gruppieren. Weitere Informationen finden Sie in diesem Google Testing Blog-Artikel .
Tags und Links dependency-injection design singleton global-variables