Hallo,
ich möchte in meinem Programm (#D 2.0) auf ein DataSet als Singleton-Klasse (d.h. wie auf ein globales Datenmodul) zugreifen. Die Verknüpfung mit der Datenbank soll per DbProviderFactory organisiert werden, damit ich später evtl. auch einen anderen Client ansprechen kann. Ich bin unsicher, wie ich meine Klasse am günstigsten organisiere.
Bitte verzichtet auf Anmerkungen, die jetzt nicht wichtig sind, sondern beachtet:
- Fast alles, was sich auf 'Singleton' bezieht, habe ich jetzt weggelassen.
- Kümmert Euch deshalb auch nicht um private und public; das werde ich schon richtig festlegen.
- Als Konstruktor werde ich eine Methode verwenden, der der Name der Datenbank und ein Kürzel für den SQL-Provider sowie UserName und Password übergeben werden.
- Die von DataSet abgeleitete Klasse soll auch die Zugriffe auf die DB regeln (Select, Insert, Update, Delete, SProcs), also auch SqlCommands ausführen.
Variante 1:
Basisklasse ist DataSet, darin enthalten ein DbProviderFactory.
Code:
public sealed class ds : System.Data.DataSet {
private System.Data.Common.DbProviderFactory prov;
// usw.
Variante 2:
Basisklasse ist DbProviderFactory, darin enthalten ein DataSet.
Code:
public sealed class cd : System.Data.Common.DbProviderFactory {
private System.Data.DataSet ds;
// usw.
Variante 3: Von DbProviderFactory und DataSet leite ich
getrennte Klassen ab, von ds greife ich auf cd zu.
Code:
public sealed class cd : System.Data.Common.DbProviderFactory
// usw. alle Details
public sealed class ds : System.Data.DataSet {
private JThomas.Data.cd prov;
// usw.
// im Konstruktor wird ein Verweis auf cd übergeben:
prov = cd;
[/edit]
Zusatzinformation: Es handelt sich um ein
typisiertes DataSet, das durch
xsd.exe automatisch erzeugt und als
public sealed class deklariert wurde. Ein solches DataSet kann also nicht geerbt werden; und von Änderungen im Quelltext ist dringend abzuraten für den Fall, dass es mit xsd.exe erneut erstellt wird.
Konsequenz: Variante 1 ist faktisch nicht möglich; Variante 2 ist zu empfehlen.
Bitte nennt mir Gesichtspunkte, die für und gegen diese Varianten sprechen, oder auch Alternativen.
Danke! Jürgen
PS. In der Zukunft wird es mehrere so aufgebaute Klassen geben; eine allgemeine Lösung ist deshalb sehr hilfreich.