Jeena Paradies: Übergabe/Vererbung von fertigem Objekt

Beitrag lesen

Hallo,

Der ganze Code ist sehr vereinfacht dargestellt. Neben dem notificationCenter wird auch die factory mit übergeben so dass jedes dieser Objekte genau diese factory dann benutzen kann um neue Objekte zu erstellen.

var foo = aPlayer.factory.create(Foo, "bar");

Und ich kann mir Vorstellen dass wir in Zukunft noch mehr mit übergeben wollen als diese Zwei ohne dass wir alle Dateien anfassen zu müssen.

Die Struktur des Programs ist in etwa so:

Coordinator (1)
 Chanel (n)
  User (n)
  ServerGame (1)
   ServerProcessor (1)
    PhysicsEngine (1)
     Doll (n)
     InputController (1)
     ... usw.

Das geht noch breiter und tiefer. Es gibt also viele Chanels und alle Objekte die mit einem Chanel (jeder Chanel ist so zu sagen eine Instanz des Spieles) zu tun haben sollen jetzt ein gemeinsames NotificationCenter benutzen um miteinander zu komunizieren. Wenn also z.b. der User ein gameCommand von außen über das socket bekommt dann soll er nur sagen müssen notificationCenter.trigger("gameCommand", [command, args]) und alle die sich dafür registriert haben sollen benachrichtigt werden. Z.b. könnte sich InputController registrieren und dann schauen ob da daten reinkommen die ihn betreffen wie ein "jump"-Befehl oder so und darauf reagieren.

Mein erster Ansatz war einfach diese Methoden in jedes Zwischenobjekt reinzumachen. D.h. User hat nur einen Pointer zu Chanel also habe ich im Chanel.performGameCommand implementiert. Chanel hat nur einen Pointer zu ServerGame also habe ich ServerGame.performGameCommand implementiert. ServerGame hatte einen Pointer zu ServerProcessor also habe ich ServerProcessor.performGameCommand implementiert, das wiederum hatte einen Pointer zu PhysicsEngine also PhysicsEngine.performGameCommand, ich bin noch nicht mal am Ende der Kette aber man merkt dass das kein sinnvoller weg ist, denn der Code wird dadurch unlesbar und unwartbar.

Deshalb die Idee mit dem NotificationCenter. Ich wollte da aber nicht einfach nur wieder das gleiche wie vorher machen dass ich das die ganze Zeit über alle Level hindurch manuell übergebe und wenn ich irgendwann noch ein zweites Objekt mit übergeben möchte dann muss ich wieder alle Dateien anfassen und dieses übergeben.

Ich weiß selbst dass das gehackt aussieht und es für dritte dann etwas schwierig zu verstehen ist woher jetzt in jedem Objekt plötzlich this.notificationCenter auftaucht, die Hoffnung ist dass wie über this.factory.new(Foo, args) stolpern und sich dann auf die Suche machen. Bis auf die Manuelle Übergabe über den Constructor fällt mir aber nichts wirklich besseres ein. Naja doch als ich das jetzt alles aufgeschrieben habe fiel mir ein dass man das ganze vielleicht gleich von Anfang an auf verschiedene richtige Prozesse aufteilen könnte, so dass jeder Chanel ein Prozess ist, das würde dann auch gleich mehr skalieren und man könnte auch mehrere Kerne nutzen und hätte dann immer nur ein globales NotificationCenter. Das muss ich gleich mal weiter untersuchen.

Jeena