Mir stößt das Prinzip der globalen Variablen recht sauer auf. Natürlich ist es bequem, aber nicht sonderlich sauber.
Schöner wäre es doch eine abstrakte Datenzugriffsklasse zu haben mit den implementierungen Netzwerkzugriff und Plattenzugriff.
Entweder übergibst du jetzt jedem Modul eine Referenz auf Datenzugriffsklassse oder du machst weiter mit OOP, was wohl bequemer (und sicherer, besonders beim wechsel der Datenquelle) ist.
Mit einer ModulBasisklasse die einen statischen Pointer auf Datenzugriffsklasse brauchst du nur diesen einen Pointer auf dem neuesten Stand zu halten.Alle Erben der Modulbasisklasse haben damit auch gleich einen aktuellen Pointer auf den Datenzugriff
Vieleicht wirds mit einem Beispiel klarer
class DatenZugriff
{
public:
DatenZugriff(); // Konstruktor
virtual DatenZugriff(); // Destruktor (tilde geht leider bei grad nicht)
DatenTyp1 LeseDatenTyp1() = 0; // abstrakte / pure Methode
}
class Netzwerklesen : public DatenZugriff
{
public:
....// Konstruktor, Destruktor
DatenTyp1 LeseDatenTyp1(); // implementierung in der zugehörigen .cpp datei
}
class FestplatteLesen : public DatenZugriff
{
public:
...// Konstruktor, Destruktor
DatenTyp1 LaseDatenTyp1(); // implementierung, bloß diesmal für Festplatten
}
class MutterAllerModule
{
public:
...// Konstruktor , Destruktor
void NeuerZugriff( DatenZugriff *zugriff); // stellt neuen Zugriff ein, evtl wird hier auch gleich der alte zugriff delete 'd
protected:
static DatenZugriff *zugriff;
}
Alle kinder von "MutterAllerModule" können jetzt jederzeit (solange "zugriff" nicht NULL ist jedenfalls) immer zugriff->LeseDatenTyp1() benützen und müssen sich nicht drum scheren woher die Daten genau kommen. Sie sollten jedoch eine gewisse toleranz gegenüber Langsamen Netzwerkverbindungen usw. mitbringen, aber das ist ein ganz anderes (längeres) Kapitel
Viel Spass