0

In meinem aktuellen Projekt habe ich Akteure, die sich in einer Umgebung bewegen möchten. Verschiedene Akteure unterschiedliche Bewegungs Strategien haben, und ich die Strategien bin Injektion als in die Actors Abhängigkeiten wie folgt (sprachunabhängig):Auflösen der zirkulären Abhängigkeit mit einer Bibliotheksklasse

actor = new Actor(new Strategy()); 

Allerdings muss die Strategie der Lage sein, Entscheidungen zu treffen, auf der Grundlage der Darsteller des Staates (wie seine aktuelle Position, Gesundheit, usw.). Daher müsste der Actor in die Strategie eingefügt werden, und das ist offensichtlich ein schlechtes Design, da es eine zirkuläre Abhängigkeit ist.

Nach this article lesen, habe ich versucht, von Schauspielern in eine neue Klasse einige Statusinformationen zu extrahieren genannt Staat und habe jetzt ein Abhängigkeitsmodell, das wie folgt aussieht:

state = new State(); 
strategy = new Strategy(state); 
actor = new Actor(state, strategy); 

Dadurch wird die zirkuläre Abhängigkeit eliminiert. In meinem Projekt wird Actor jedoch von einer Bibliotheksklasse abgeleitet, die bereits Statusinformationen (Position, Gesundheit usw.) enthält. Daher ist es nicht wirklich sinnvoll, eine dritte State-Klasse zu extrahieren, wenn Actor bereits diese Verantwortung trägt. Alles was Staat tun würde ist, den Staat von Actor zu packen, also sind sie im schlimmsten Fall immer noch zirkulär abhängig oder bestenfalls stark gekoppelt.

Was ist der beste Weg, um eine Situation wie diese zu behandeln? Am Ende versuche ich Bewegungsstrategien in Akteure zu injizieren, wo die Strategien einige Zustandsinformationen kennen müssen, um kluge Entscheidungen treffen zu können, und Akteur erweitert eine Bibliotheksklasse, die einen Zustand enthält.

Antwort

0

Strategie ist nicht wirklich etwas, das explizit einem bestimmten Darsteller gehört. Es sollte wahrscheinlich ein Singleton sein, der Actor als Methodenparameter verwendet.

In C# können Sie damit MEF in vollem Umfang implementieren.

Verwandte Themen