Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   C# DataSet + DbProviderFactory als Singleton - wie verknüpfen? (https://www.delphipraxis.net/77342-dataset-dbproviderfactory-als-singleton-wie-verknuepfen.html)

Jürgen Thomas 18. Sep 2006 12:10

Datenbank: Firebird • Version: 2.0 RC4 • Zugriff über: Firebird Net Provider 2.0 RC1

DataSet + DbProviderFactory als Singleton - wie verknüpfen?
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz