2016-10-18 2 views
0

Ich mag es wirklich zu programmieren, aber momentan ist jedes Projekt, das ich begonnen habe, aufgrund der zirkulären Abhängigkeiten, die mir und meinem Kopf wirklich Probleme machen, vorzeitig zu Ende. Ich habe Probleme gehabt, ich versuche Spiele zu machen, aber aufgrund meiner Klassenstruktur bin ich auf einige zirkuläre Abhängigkeiten angewiesen, die am Ende Probleme verursachen, die fast immer wachsen und außer Kontrolle geraten. Wie ich es in der Regel strukturieren:Circular Abhängigkeiten und bessere Möglichkeiten, es zu tun?

  1. Klasse Spiel
    1. Klasse GameContext
      1. Klasse Fenster
        1. Klasse GameContext
      2. Klasse Eventmanager
        1. Klasse GameContext
      3. Klasse State
        1. Klasse GameContext

ich diese verwenden, da ich manchmal zum Beispiel das Fenster zugreifen müssen aus der EventManager . Am Ende verliere ich es immer. Gibt es einen besseren Weg für etwas, das zirkuläre Abhängigkeiten vermeidet? Und wenn nicht, wie denkst du wirklich darüber nach, wenn du mit ihnen umgehen musst? Ich dachte, ich hätte sie verstanden, aber eindeutig nicht.

Was ich versuche zu archivieren ist eine zentrale "Context" -Klasse, auf die andere Klassen zugreifen können, aber ich weiß nicht, wie man in einem solchen Fall zirkuläre Abhängigkeiten vermeiden kann.

Um wirklich zu zeigen, was ich meine, können Sie THIS betrachten, mein letzter fehlgeschlagener Versuch. Das Problem, das ich mit dieser aktuellen Struktur habe, scheint etwas mit einer Abhängigkeit zwischen dem EventManager und dem GameStateManager zu tun zu haben, da ich im EventManager eine Fehlermeldung bekomme, dass GameStateID nicht definiert ist.

+0

Ich denke, Sie müssen versuchen, herauszufinden, warum Sie vom EventManager auf das Fenster zugreifen müssen. Was macht der EventManager? Warum braucht es ein Fenster dafür? –

+0

@ZongZhengLi Ja, ich nehme an, es gehört auch hier. Obwohl dies derzeit zu weit/unklar IMO ist. –

+0

Es ist nicht beabsichtigt, über Code-Design speziell für Spiele zugeschnitten zu sein, ich habe nur Spiele als das Thema, da es ist, wo ich es benutze und Probleme bekomme. Es könnte ein Raketenschiff sein, das einen RocketContext enthält, der einen AuspuffManager enthält, der manchmal etwas von RocketContext benötigt. –

Antwort

0

ich es geschafft, mein Problem, herauszufinden, und es war mehr in der Art und Weise, wie ich darüber nachgedacht, ich dachte, dass ich eine Struktur wie diese wollte:

  1. Klasse Spiel
    1. Klasse GameContext
      1. Klasse Fenster
        1. Klasse GameContext
      2. Klasse Eventmanager
        1. Klasse GameContext

Aber was ich eigentlich wollte, war:

  1. Klasse Spiel
    1. Klasse Fenster
    2. Klasse Eventmanager
    3. Klasse GameContext

Wo jeder jede Klasse außer GameContext einen Zeiger auf eine GameContext enthält. Auch eines meiner Probleme war mein Verständnis der Vorwärtsdeklaration, ich verstand sie nicht und mischte und verbreitete sie überall, weil ich dachte, es wäre Magie.

+0

In der Regel treten diese Probleme auf, wenn Sie Klassen ohne Status erstellen oder sie nur als eine Sammlung von Funktionen verwenden. Sie können sich diesen Artikel näher anschauen: http://steve-yegge.blogspot.com.br/2006/03/execution -in-kingdom-of-nouns.html –

+0

Was meinst du mit "Staat"? –

+0

Wenn alle Funktionen in einer Klasse extrahiert werden können und als freie Funktionen arbeiten, hat Ihre Klasse keinen Status und sollte keine Klasse sein. Ein übliches Beispiel, das Sie online sehen würden, ist eine "Formatter" -Klasse, die eine Funktion zum Formatieren von etwas enthalten würde. –

Verwandte Themen