Referenzen durch die Klassen weiterreichen
-
Hallo
Es ist für mich etwas schwierig, das Problem zu erklären. Deshalb nehme ich einfach mal das, woran ich gerade arbeite, als Beispiel.
Es geht um einen TCP-Server, der mit Poll arbeitet. Dafür habe ich einen Container geschrieben, der eine Liste von Ereignisobjekten für Dateideskriptoren hat. Solch ein Ereignisobjekt ist dann z.B. eines, das auf Ereignisse des "Listen[eng. :D]"-Dateideskriptors reagiert und bei neuen Verbindungen in den Ereiniscontainer ein neues Ereignisobjekt für eben diese neue Verbindung einträgt. Soweit so gut.
Nun läuft das ganze im Hauptprogramm in etwa so ab:int main(void) { Eventcontainer eventcontainer; //Userverwaltung user; for(;;) eventcontainer.warteaufereignisseundbearbeitesie(); }
Wenn ich nun aber z.B. ein Objekt mit einer Userverwaltung haben will, dann müsste das ja in dem obigen Fall in der main-funktion definiert sein (Im Eventcontainer macht es keinen Sinn, und noch weiter oben bei den einzelnen Verbindungsereignisbearbeitungsdingern erst recht nicht)
Daraus Folgt dann also, dass ich dem Eventcontainer eine Referenz von der Userverwaltung geben muss, damit der diese Referenz an die einzelnen Verbindungen weitergeben kann, damit diese dann mit der Userverwaltung etwas machen können.
Und das stinkt mir gewaltig.Dadurch habe ich jede Menge Abhängigkeiten der Klassen, sogar in beide Richtungen. Kann ja gut sein, dass ich diese Klassen für einen TCP-Server später noch für etwas anderes benutzen möchte, ohne Userverwaltung. Dann müsste ich dieses weiterreichen der Referenzen Stück für Stück wieder rausnehmen. Igitt!
Gibt es da nicht irgendeinen Trick, mit dem sich der ganze Ärger vermeiden lässt?
-
Mach Userverwaltung zu einem Singelton, welcher
dann eine Liste von Usern hält, damit musst du es
nicht mehr an die Klasse übergeben, sondern nur noch
auf die Instanz des Singeltonobjektes zugreifen.Devil
-
Hmm ich bin mir nicht sicher ob ich dich jetzt richtig verstanden habe.
Ist es immer so dass der Container diese Objecte einträgt, nur dass es nicht immer Userverwaltungsobjecte sein müssen ? Wenn ja kannst du ja eine Basisklasse für alle Objecte bauen. Und die Verschiedenen Objecte dann ableiten. Dann bräuchtest du allerdings einen Zeiger.
-
Könntest du die Benutzerverwaltung nicht so einbauen, dass ein Benutzer zu einer Datei gehört
und somit das Dateihandle die Benutzer verwaltet und Benutzer zu den Dateien optional sind?
-
devil, vielen dank! nach genau so etwas habe ich gesucht *hüpf*