Anzeige:
Ergebnis 1 bis 5 von 5

Thema: (C++) Programmdesign-Frage

  1. #1
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762

    (C++) Programmdesign-Frage

    Ich will ein Client-Server basiertes Programm schreiben.

    Ich habe den Server in mehrere Module unterteilt: Core, Netzwerk, Scriptinterface, Events und noch ein paar mehr.
    Was die ganzen Teile machen, ist nicht wirklich wichtig für hier, bzw vom Namen her direkt erkennbar.

    Konzentrieren wir uns auf "Core":
    Ich hab mir gedacht, dass alle Module über ein globales Core-Objekt ansprechbar sind, wo sie in einem Container verwaltet werden.
    Das würde mir den Vorteil bringen, dass ich nur ein globales Objekt hätte und nicht jedes Modul global wäre.

    Aber:
    Das globale Objekt ist als Meyer-Singleton keine so gefährliche Sache wie ein normales globales Objekt, so dass ich auch jedes Modul als globales Objekt erstellen könnte. Dann könnte "Core" eigentlich auch wegfallen.
    Bringt das denn nicht auch einen gewissen Overhead mit sich, wenn alles in diesem Core-Objekt steckt?

    Welchen Weg haltet ihr für sinnvoller? Ein globales Objekt mit viel Inhalt oder mehrere kleine globale Objekte?
    I haven't lost my mind - It's somewhere on a backup-disc

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Je weniger global, desto besser.
    Wenn du zB später drauf kommst, dass du gerne zwei Instanzen von einem Modul hättest, ist das mit einem Container kein Problem, aber wenn das Modul selbst ein Singleton ist, musst du dafür extra das Modul ändern.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    ich brauche nur ein einziges Objekt von jedem Modul; die werden in der main (oder in Core) einmal erzeugt und bei Programmende wieder freigegeben.

    aber wenn das Modul selbst ein Singleton ist, musst du dafür extra das Modul ändern.
    was meinst Du damit jetzt?
    I haven't lost my mind - It's somewhere on a backup-disc

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von SeeksTheMoon
    ich brauche nur ein einziges Objekt von jedem Modul; die werden in der main (oder in Core) einmal erzeugt und bei Programmende wieder freigegeben.
    Es ist dein Design.
    Wenn du 100% sichergehen kannst, dass kein Module jemals mehr als einmal benötuigt werden wird und die Module auch in keinen anderen Projekten vielleicht mal wieder eingesetzt werden könnten, kannst du sicher jedes Modul als Singleton ausführen.


    was meinst Du damit jetzt?
    Wenn du jedes Modul als Singleton ausführst und dann später draufkommen solltest, dass du gerne mehere Instanzen davon benutzen würdest, musst du das Modul ändern und jeden Aufruf der Erzeugungsmethode kontrollieren.

    Wie gesagt hängt das davon ab, wie fertig dein jetztiges Konzept ist und du mit Sicherheit ausschliessen kannst, nie mehr als eine Instanz zu benötigen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    ja, ich brauche jede Instanz nur 1x. Die sind solange lebendig wie das Core-Modul, also solange das Programm läuft.
    Bisher siehts also so aus:

    Code:
    main()
      |
      |-Core als Singleton erzeugen
      |      |
      |      |-Modul1 1x initialisieren
      |      |-Modul2 1x initialisieren
      |      |-Modul3 1x initialisieren
      |      |

    Jetzt noch ne andere Frage:
    Die Module müssen ja Daten austauschen, z.B. kommt übers Netz ein Befehl rein, der etwas vom Script-Interface geliefert bekommen will.

    Ich habe mir gedacht, dass die Module besser nicht alle kreuz und quer miteinander kommunizieren, sondern dass alle Module nur eine Schnittstelle zu Core haben und dieser die Befehle richtig verteilt und die Antworten zurückliefert.
    Jedes Modul ruft also beispielsweise "Core.befehl(char*)" oder sowas auf, anstatt zu allen Möglichen anderen Modulen Interfaces zu haben.

    Ich denke, die Vorteile liegen auf der Hand:
    - bessere Wartbarkeit+Weniger Schreib+Denkarbeit,
    - Prüf- und Verteilerlogik an nur einer Stelle,
    - geregelter Zugriff
    Das wurde aber auch von jemandem als unsinnig kritisiert (ohne mich wirklich zu überzeugen).
    Sieht vielleicht jemand einen Nachteil darin, die Befehle von einer zentralen Stelle zu verteilen, anstatt ein Netz aus vielen Kommunikationsstrecken aufzubauen?
    Es wurden Punkte genannt wie "die Modularität geht verloren", was ich nicht wirklich nachvollziehen kann.


    Irgendwie fällt mir gerade der Vergleich zum Netzwerk ein: Stern vs. Masche
    Die Wege bei der Masche sind nur sinnvoll um Ausfallsicherheit zu garantieren; sowas gibts in meinem Programm natürlich nicht; Module fallen nicht aus, höchstens das Programm stürzt ab
    Eine Masche wäre hier also Kabelverschwendung, wenn ich das mal so ausdrücken darf.

    Meinungen dazu?
    I haven't lost my mind - It's somewhere on a backup-disc

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •