In letzter Zeit schreibe ich Methoden zum Auswählen von Datenzugriffsschichten, wobei der Code all diese allgemeine Form annimmt:
%Vor%Oder so:
%Vor%Diese Methoden werden von Business-Layer-Code aufgerufen, der die DataTable- oder DataRecord-Basis in stark typisierte Geschäftsobjekte konvertiert, die von der Präsentationsschicht verwendet werden können.
Da ich wiederholt ähnlichen Code verwende, möchte ich sicherstellen, dass dieser Code der beste Code ist. Wie kann es verbessert werden? Und es lohnt sich zu versuchen, den gemeinsamen Code von diesem auf seine eigene Methode zu übertragen. Wenn ja, wie würde diese Methode aussehen (speziell hinsichtlich der Übergabe einer SqlParameter-Sammlung)?
Muss meine eigene hinzufügen:
DataReader von DataLayer in Using zurückgeben Aussage
Das neue Muster ermöglicht es mir, immer nur einen Datensatz im Speicher zu haben, aber umschließt die Verbindung immer noch in einer netten using-Anweisung:
%Vor%Ein Muster, das mir gefallen hat, sieht für den Client-Code so aus:
%Vor%Normalerweise mache ich die Verbindung optional, und ich werde so codieren, dass ich sie aus dem ConnectionStrings-Konfigurationsabschnitt herausholen oder sie als die tatsächliche Verbindungszeichenfolge behandeln kann. Dadurch kann ich den dal in einmaligen Szenarien wiederverwenden und bin zum Teil ein Habbit von den COM + -Tagen, als ich die Verbindungszeichenfolge mit der Objektkonstruktionseigenschaft gespeichert habe.
Ich mag das, weil es einfach zu lesen ist und den ganzen ADO-Code von mir verbirgt.
Das einzige, was ich anders mache, ist, dass ich von meinen eigenen internen Datenbank-Hilfsmethoden auf den eigentlichen Datenzugriff-Anwendungsblock umschalte Ссылка
Macht es für andere Entwickler, die die Enterprise-Bibliothek kennen, um den Code hochzufahren, etwas standardisierter / einheitlicher.
Es gibt so viele Möglichkeiten, den DBAL zu implementieren, meiner Meinung nach sind Sie auf dem richtigen Weg. Etwas, das Sie in Ihrer Implementierung berücksichtigen sollten:
Fügen Sie Parameter hinzu mit DbUtil.AddParameter(cmd, "@Id", SqlDbType.UniqueIdentifier, Id);
Zunächst denke ich, dass Sie bereits überlegt haben, ein ORM zu verwenden, anstatt das eigene zu rollen. Ich werde nicht auf diesen eingehen.
Meine Gedanken dazu, einen eigenen Datenzugriffscode zu erstellen:
Mein Vorschlag (Ich habe beide Methoden ausprobiert - der Vorschlag ist der neueste Arbeitsansatz, den ich entwickelt habe - er hat sich im Laufe der Zeit entwickelt).
Das Ziel besteht darin, wie folgt zu verwenden:
%Vor%Der Vorteil für mich war, dass ich nur eine Datei ändern muss, um Änderungen in den Datenbankspaltennamen, -typen usw. zu bewältigen (kleine Änderungen im Allgemeinen). Mit einigen gut durchdachten Regionen können Sie den Code so organisieren, dass es sich um separate "Ebenen" im selben Objekt handelt :). Der andere Vorteil ist, dass die Basisklasse wirklich von einem Projekt zum anderen wiederverwendet werden kann. Und der Code Bloat ist minimal (gut, verglichen mit den Vorteilen. Sie könnten auch Datasets füllen und sie an UI-Steuerelemente binden: D
Die Einschränkungen - Sie haben am Ende eine Klasse pro Domänenobjekt (normalerweise pro Hauptdatenbanktabelle). Und Sie können keine Objekte in vorhandenen Transaktionen laden (obwohl Sie daran denken könnten, die Transaktion weiterzugeben, falls Sie eine haben).
Lassen Sie es mich wissen, wenn Sie an weiteren Details interessiert sind - ich könnte die Antwort ein wenig erweitern.
Ähnlich wie ich hier
gepostet habe %Vor%Ich habe diese einfachen Erweiterungsmethoden, um den Aufruf zu vereinfachen:
%Vor%So kann ich jetzt anrufen:
%Vor%Dies ist vollständig generisch und passt zu jedem Modell, das den ado.net-Schnittstellen entspricht. Das Verbindungsobjekt und der Leser werden erst nach dem Auflisten der Auflistung angeordnet.
Tags und Links .net data-access-layer .net-2.0