chetigol
2013-02-06, 14:14:29
Hi,
überlege gerade, was ich im folgenden Beispiel eher verwenden sollte! Irgendwie hab ich gerade schwierigkeiten mich zu entscheiden.
Ich baue eine Klasse, welche gewisse Daten aus einer Datenbank bereitstellen soll, welche der beiden Implementierungsarten wäre "sauberer" ?
1. virtuelles Interface
class DbInterface {}; // abstractes db interface
class KonkretesDbInterface : public DbInterface {};
class DatenBereitsteller
{
private:
bool check()
{
if ( database.ok() == false ) ....
}
public:
DatenBereitsteller( DbInterface& db ) : database(db)
{
db.connect();
.....
}
Daten1 getDaten1() { db.exec("SELECT...."); .... }
Daten2 getDaten2() { db.exec("SELECT...."); .... }
Daten3 getDaten3() { db.exec("SELECT...."); .... }
};
int main()
{
DbInterface* db = new KonkretesDbInterface( DbParameter );
DatenBereitsteller daten(*db);
}
2. Templates:
template<typename Database>
class DatenBereitsteller
{
private:
bool check()
{
if ( database.ok() == false ) ....
}
public:
DatenBereitsteller( Database& db ) : database(db)
{
db.connect();
.....
}
Daten1 getDaten1() { db.exec("SELECT...."); .... }
Daten2 getDaten2() { db.exec("SELECT...."); .... }
Daten3 getDaten3() { db.exec("SELECT...."); .... }
};
int main()
{
KonkretesDbInterface db( DbParameter );
DatenBereitsteller<KonkretesDbInterface> daten(db);
}
Ich tendiere eher zu der Methode mit Templates! Da der Datentyp der Datenbank Immer zur Laufzeit bekannt ist und sich auch zur Laufzeit nicht ändert.
Aber irgendwie bin ich mir nicht sicher! Wenn ich mir viele Template-Implementierungen anschaue, so werden diese meistens für Container-Klassen oder irgendwelche statischen Berechnungen verwendet. sehe aber selten Programme, wo Templates als "Ersatz" für dynamischen Polymorphismus verwendet werden.
überlege gerade, was ich im folgenden Beispiel eher verwenden sollte! Irgendwie hab ich gerade schwierigkeiten mich zu entscheiden.
Ich baue eine Klasse, welche gewisse Daten aus einer Datenbank bereitstellen soll, welche der beiden Implementierungsarten wäre "sauberer" ?
1. virtuelles Interface
class DbInterface {}; // abstractes db interface
class KonkretesDbInterface : public DbInterface {};
class DatenBereitsteller
{
private:
bool check()
{
if ( database.ok() == false ) ....
}
public:
DatenBereitsteller( DbInterface& db ) : database(db)
{
db.connect();
.....
}
Daten1 getDaten1() { db.exec("SELECT...."); .... }
Daten2 getDaten2() { db.exec("SELECT...."); .... }
Daten3 getDaten3() { db.exec("SELECT...."); .... }
};
int main()
{
DbInterface* db = new KonkretesDbInterface( DbParameter );
DatenBereitsteller daten(*db);
}
2. Templates:
template<typename Database>
class DatenBereitsteller
{
private:
bool check()
{
if ( database.ok() == false ) ....
}
public:
DatenBereitsteller( Database& db ) : database(db)
{
db.connect();
.....
}
Daten1 getDaten1() { db.exec("SELECT...."); .... }
Daten2 getDaten2() { db.exec("SELECT...."); .... }
Daten3 getDaten3() { db.exec("SELECT...."); .... }
};
int main()
{
KonkretesDbInterface db( DbParameter );
DatenBereitsteller<KonkretesDbInterface> daten(db);
}
Ich tendiere eher zu der Methode mit Templates! Da der Datentyp der Datenbank Immer zur Laufzeit bekannt ist und sich auch zur Laufzeit nicht ändert.
Aber irgendwie bin ich mir nicht sicher! Wenn ich mir viele Template-Implementierungen anschaue, so werden diese meistens für Container-Klassen oder irgendwelche statischen Berechnungen verwendet. sehe aber selten Programme, wo Templates als "Ersatz" für dynamischen Polymorphismus verwendet werden.