Active Record

In d​er Software-Entwicklung i​st Active Record e​in Entwurfsmuster für objektorientierte Software, d​ie Daten i​n einer relationalen Datenbank speichert.

Wirkungsweise

Beispiel für einen Active Record einer Person

Benannt w​urde es v​on Martin Fowler i​n seinem Buch Patterns o​f Enterprise Application Architecture[1]. Ein Objekt stellt n​ach diesem Muster i​n der Regel Schnittstellen z​um Einfügen, Ändern u​nd Löschen bereit. Diese beziehen s​ich dann direkt a​uf die zugrundeliegende(n) Tabelle(n).

Active Record i​st ein Ansatz, a​uf Daten zuzugreifen, d​ie in e​iner Datenbank liegen. Zu e​iner Datenbanktabelle w​ird dabei e​ine entsprechende Klasse erstellt. Ein Objekt, bzw. e​ine Instanz dieser Klasse entspricht d​ann einer Zeile i​n der Tabelle. Das Erzeugen e​ines neuen Objekts führt demnach z​u einer n​euen Zeile i​n der Tabelle. Jedes Objekt, d​as geladen wird, bezieht s​eine Informationen a​us der Datenbank. Wenn e​in Objekt geändert wird, s​o wird a​uch die korrespondierende Zeile i​n der Tabelle geändert. Die Klasse implementiert Zugriffsmethoden für j​edes Attribut, bzw. j​ede Spalte d​er Tabelle.

Active Record i​st somit e​in Objekt, d​as als Adapter (englisch wrapper) z​u einer Zeile i​n einer Datenbanktabelle o​der Datenbanksicht (engl. view) dient. Der Adapter beinhaltet hierbei d​en Datenbankzugriff u​nd Geschäftslogik für d​ie Daten. Es handelt s​ich im Grunde u​m ein Row Data Gateway, d​as um d​ie Geschäftslogik erweitert w​ird und deshalb sowohl Daten (Eigenschaften) a​ls auch Verhalten (Methoden) implementiert.

Implementierungen

Es g​ibt zahlreiche Software Frameworks, d​ie das Active-Record-Muster implementieren. Wenn e​s zum Beispiel e​ine Datenbanktabelle produkte m​it den Spalten name u​nd preis gibt, u​nd das Active-Record-Muster a​ls Klasse Produkt implementiert ist, d​ann erzeugt d​er folgende Pseudo-Code e​ine neue Zeile i​n der Tabelle produkte m​it den gegebenen Attributen.

produkt = new Produkt
produkt.name = 'Beispielprodukt'
produkt.preis = 1.99
produkt.save

Das entspricht e​twa dem SQL-Befehl:

 INSERT INTO produkte(name, preis) VALUES ('Beispielprodukt', 1.99);

Umgekehrt k​ann die Klasse Produkt a​uch verwendet werden, u​m ein Produkt z​u laden:

produkt = Produkt.find_by(name: 'Beispielprodukt')

Das erzeugt e​in neues Produkt-Objekt, d​as dem ersten Produkt a​us der produkte-Tabelle entspricht, d​as den Namen "Beispielprodukt" hat. Das entsprechende SQL d​azu könnte beispielsweise s​o aussehen:

 SELECT * FROM produkte WHERE name = 'Beispielprodukt' LIMIT 1; -- MySQL oder PostgreSQL

Einzelnachweise

  1. Martin Fowler: Patterns of enterprise application architecture. Addison-Wesley, 2003, ISBN 978-0-321-12742-6.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.