Wie unterscheidet sich eine Implementierung von Table Data Gateway von Active Record?

8

Vereinfacht gesagt: Implementierung des Table Data Gateway (TDG): Sie erstellen eine separate TDG-Klasse, die SQL für CRUD-Operationen mit einer konkreten Tabelle enthält. Ihre Modelle kommunizieren also nicht direkt mit einer Datenquelle (z. B. Datenbank), sondern über diese abstrahierten - TDG-Klassen. Also, es ist nur ein Ansatz, um eine andere Abstraktionsebene zu erstellen und es ist nur ein Wrapper für die Kommunikation mit der Datenbank - holen und modifizieren Sie die Daten. IMHO TDG-Klassen sollten keine Mitglieder, nur Methoden enthalten. Hier ist ein gutes Schema, das das TDG-Muster visualisiert. Bei Verwendung des TDG-Ansatzes sollte SQL von Modellklassen in Datenquellenklassen (TDG) verschoben werden. Und alle Daten, die ich von DB durch TDG-Klassen abrufen, werden in meinen Modellmitgliedern gespeichert.

Was ist nun mit der aktiven Implementierung von Aufzeichnungen? Wenn ich den Datenzugriff und meine Modellklasse in einer Modellklasse zusammenführen würde, würde ich dann den aktiven Datensatz implementieren? Ich konnte keine klare Unterscheidung finden oder wie diese Muster in PHP aussehen und sich voneinander unterscheiden.

Oft habe ich eine Singleton-Datenbankklasse und dann eine separate Modellklasse für jede Datenbanktabelle. Jede Modellklasse verfügt über CRUD + mehrere benutzerdefinierte (Anzahl, Durchschnitt und usw.) Operationen. Einige Klassen verfügen über Mitglieder, die Ergebnisse von CRUD oder benutzerdefinierte Operationen beibehalten können. Dies geschieht nach Bedarf. Könnte dieser Ansatz als aktiver Datensatz identifiziert werden? Wenn ich SQL von meinen Modellklassen in TDG-Klassen verschieben würde, wäre dies dann Table Data Gateway?

    
Centurion 01.01.2012, 15:33
quelle

1 Antwort

14

Von Ссылка

  

Table Data Gateway: Ein Objekt, das als Gateway (466) für eine Datenbanktabelle fungiert. Eine Instanz behandelt alle Zeilen in der Tabelle.

  

Aktiver Datensatz: Ein Objekt, das eine Zeile in einer Datenbanktabelle oder -sicht umschließt, den Datenbankzugriff kapselt und diesen Daten Domänenlogik hinzufügt.

Der offensichtliche Hauptunterschied besteht darin, dass TDGs den Zugriff auf eine Tabelle umleiten und nur Zeilendaten zurückgeben, während ARs den Zugriff auf eine Zeile in der Tabelle und fügt Geschäftslogik hinzu.

Sofern Sie keine sehr niedrige Impedanz haben, wird ein TDG bevorzugt, da Ihre Business- / Domain-Objekte mit AR der Struktur in der Datenbank folgen, was uns normalerweise nicht entspricht, wie Ihre Domain-Objekte modelliert werden sollten. Eine Reihe kann wissen, wie man sich selbst hält, aber eine Person sollte nicht wissen. Auf lange Sicht ist es besser wartbar, Persistenzlogik und Domänenlogik zu trennen.

Was Ihr Singleton DB-Objekt betrifft, werfen Sie einen Blick auf Gibt es einen Anwendungsfall für Singletons mit Datenbank? Zugang in PHP? .

    
Gordon 01.01.2012, 16:07
quelle