Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#1

DataSet + DbProviderFactory als Singleton - wie verknüpfen?

  Alt 18. Sep 2006, 12:10
Datenbank: Firebird • Version: 2.0 RC4 • Zugriff über: Firebird Net Provider 2.0 RC1
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.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat