Designfrage



  • Hi,

    ich wollte mal eure Meinung zu einem Problem hören.

    Mein Server besteht aus vielen verschiedenen Modulen, z.B. UDPHandler, MsgDistributor, Timer, AuthMgr usw., von denen die meisten auch wiederum einige andere kennen müssen.

    Bisher regele ich das so, dass jede Instanz ihre eigenen Referenzen speichert, nur sieht das dann teilweise so aus:
    [cpp]class AuthMgr : public CmdSubscriber, public MsgSubscriber
    {
    public:
    AuthMgr(CmdDistributor& cmdDistributor, UDPServer& udpServer, MsgDistributor& msgDistributor, Database& database, Console& console);

    private:
    virtual void handleCommand(CommandPtr pCommand);
    virtual void handleMessage(PacketPtr pPacket);

    UDPServer& m_udpServer;
    Database& m_database;
    Console& m_console;

    long m_lMaxClients;
    };[/cpp]

    Den Code von der Initialisierung der Applikationklasse, die die Module alle enthält, zeige ich jetzt lieber gar nicht. 😮

    Die Frage ist jetzt nur, was ich dagegen machen soll:
    - So lassen, schließlich ist es so am flexibelsten und hat die höchste Wiederverwendbarkeit der einzelnen Module
    - Module als Singleton (würde ich gerne vermeiden, da ich später evtl. z.B. auch zwei Datenbanken haben möchte)
    - Applikationsklasse als Singleton (eigentlich gut)
    - Globale Instanz der Applikationsklasse (auch gut), überall wo ich dann ein Modul brauch, einfach extern const Application* pApplication; und gut ist...

    ChrisM



  • Vielleicht könnte dir das Mediator-Muster helfen(vgl. Design Patterns)

    mfg
    Glamdring



  • Hi,

    ja, das könnte mir helfen, aber ist das hier nicht etwas viel Overhead? Ich meine, bei einer pluginbasierten Engine oder so: Bestimmt nützlich, aber hier?

    Dann wäre die Hauptklasse mein Mediator, oder?

    ChrisM



  • Ich habe damals für dieses Problem das Ganze einfach so geregelt, dass ich eine Struktur an gelegt habe, in denen alle Referenzen gespeichert waren.



  • Hi,

    das wäre dann wohl die vierte Variante und glaub ich leider auch die mit dem niedrigsten Wiederverwendbarkeitswert der einzelnen Komponenten.

    Trotzdem werd' ich wahrscheinlich meine Applicationclassinstance global machen (const natürlich, damit nicht von überall dran rumgepfuscht werden kann).

    ChrisM


Log in to reply