Was ist der Zweck von Active Aufzeichnungen?
-
05-07-2019 - |
Frage
Ich bin mit CodeIgniter bastelt und sind dabei auf aktive Datensätze zum ersten Mal kommen. Zunächst wies ich es als etwas für Leute, die nicht wirklich wissen, wie SQL zu schreiben. Ich weiß jetzt, dass meine Analyse fehlerhaft war und Active Aufzeichnungen sind ziemlich prominent, vor allem in Rails.
Aber welchen Zweck Aktive Aufzeichnungen halten? Ist es zu abstrahieren von verschiedenen RDBMS Individualitäten. Wenn also dachte ich, das ist nicht das, was gemeint ist, SQL zu tun. Darüber, was das Beste Praxis sollte ich diese?
verwendenVielen Dank im Voraus
Lösung
Die „Active Record“ ist ein zentraler Bestandteil der meisten Programmierumgebungen werden. Es macht einfacher CRUD (Create, Update, Lesen, Löschen) Aufgaben schneller zu erreichen. Zum Beispiel, anstatt viele SQLs einfügen, aktualisieren zu schreiben und viele gemeinsame und einfache Datenobjekte löschen, ermöglicht es Ihnen einfach, um die Werte zu dem Datenobjekt zuordnen und einen Befehl ausführen z.B. $ Object-> save () wird die SQL für Sie zusammengestellt und ausgeführt wird.
Die meisten Frameworks auch Datenbeziehungen in ihren jeweiligen Active Record Modelle implementieren, die erheblich vereinfachen können Daten in Bezug auf das Objekt zugreifen. Wenn Sie angegeben haben zum Beispiel in CodeIgniter, dass eine Kategorie „hat viele“ Produkte dann nach der Kategorie Objekt aus der Datenbank laden, können Sie auflisten es Kind Produkte mit einer einfachen Code-Zeile ist.
foreach ($category->products as $product) {
echo $product->name;
}
Ein weiterer Vorteil von Active Record ist, wie Sie sagen, dass es Ihr Code zu verschiedenen Datenbankplattformen leicht tragbar macht (so lange, wie der Rahmen, den Sie verwenden einen Treiber für Ihre gewählte Datenbank hat), und obwohl dies nicht wahrscheinlich wichtig gerade jetzt scheinen, meine es mehr Wert zu einem späteren Zeitpunkt, wenn Ihre Anwendung populär wird!
Dies wird hoffentlich dazu beigetragen haben. Wikipedia beschreibt Active Record gut ( http://en.wikipedia.org/wiki/Active_record_pattern ) und die CodeIgniter docs wird ebenfalls. Ich persönlich verwenden KohanaPHP ( http://www.kohanaphp.com ), die eine PHP5 nur Gabel CodeIgniter und ich finde, dass es ORM-Modelle sind sehr nützlich!
Andere Tipps
Active Record ist ein Design-Muster für den Datenzugriff ...
Im Moment gibt es zwei Hauptentwurfsmuster scheine ich Zugang zu stoßen in Bezug auf Daten: Active und das Repository-Muster
Active Record
Ihre Objekte enthalten Verfahren für dessen Zustand in einer DB persistierende (oder anderen Persistenzmechanismus) so:
Sie können einen Kunden Objekt haben.
Customer-Objekt wird eine Reihe von Methoden wie Customer.Save hat () ;, Customer.Get (int id); und andere.
Diese Methoden haben nicht wirklich etwas mit einem Kunden in der realen Welt zu tun. Sie sind wirklich über die Infrastruktur der Anwendung.
Repository-Muster
Im Repository-Mustern, Ihr Kundenobjekt wäre ein POCO oder stumm Objekt sein. Es hat nur Methoden und Eigenschaften, die es braucht wirklich einen Kunden (Dinge wie Namen, E-Mail-Adresse, Liste Bestellungen, etc.) Darzustellen
Wenn Sie den Kunden bestehen wollen - Sie einfach übergeben es an Ihrem Repository
Repository.Save (MyCustomer).
Die Active Record ist schnell und einfach, mit zu arbeiten. Leider ist es Ihr Domain-Modell mit diesen Methoden vollstopfen, die wirklich nichts mit einem Kunden zu tun haben. Das macht es etwas härter Ihre Domain-Modell im Laufe der Zeit zu halten.
Für viele Situation ist es sehr sinnvoll, einen Active Record zu verwenden. Zum Beispiel - Wenn ich eine ziemlich einfache Anwendung zu schreiben, die wahrscheinlich würde nicht viel ändern, würde ich wahrscheinlich SubSonic Feuer und erzeugen meint ein Active Record DAL. Ich würde mein Geschäft Code wird Codierung innerhalb von 20 Minuten und alle DB Zeug ist bereits gesorgt.
Wenn auf der anderen Seite hat ich einen besonders komplexen Bereich bin Modellierung, mit hohen Empfindlichkeit zu ändern, würde ich eher meine Domain-Modelle sauber halten, und implementieren ein Repository-Muster mit nHibernate oder ähnlichem ...
Es ist schon eine lange Zeit, da ich meinen eigenen Datenzugriff mit ADO.Net gerollt, und ich wirklich es jetzt nicht empfehlen, dort so viele großen Datenzugriffstool zur Verfügung.
Ich konnte meine eigene Sicht auf dieses Muster aber die beste Abdeckung von Active Record (und viele andere) geben Patterns of Enterprise Application Architecture von Martin Fowler.
Aus Kapitel 10:
Active Record
Ein Objekt, das eine Zeile in einen hüllt Datenbanktabelle oder Ansicht, kapselt der Zugriff auf die Datenbank und fügt Domäne Logik auf diesen Daten.
Ein Objekt sowohl Daten als auch Verhalten. Ein großer Teil dieser Daten ist persistent muss und in einem gespeichert werden Datenbank. Active Record verwendet die meisten offensichtlich Ansatz, setzt den Datenzugriff Logik in dem Domänenobjekt. Diesen Weg alle Menschen wissen, wie man lesen und schreiben ihre Daten zu und von der Datenbank.
...
Wenn es benutz
Active Record ist eine gute Wahl für Domain-Logik, die nicht zu ist Komplex, wie erzeugt, liest, Aktualisierungen und Löschungen. Herleitungen und Validierungen basierend auf einem einzelnen Datensatz funktioniert gut in dieser Struktur.
...
Active Record hat die primäre Vorteil der Einfachheit. Es ist leicht zu Aktive Aufzeichnungen bauen, und sie sind einfach zu verstehen. ihre primäre Problem ist, dass sie gut funktioniert nur dann, wenn die Active Record Objekte entsprechen direkt an den Datenbanktabellen: eine isomorph Schema.
Wenn Ihr Unternehmen Logik ist komplex, werden Sie bald wollen Verwenden Sie Ihr Objekt direkten Beziehungen, Sammlungen, Vererbung und so weiter. Diese nicht Karte leicht auf Active Record, und sie Stück für Stück Zugabe wird sehr chaotisch. Das ist, was Sie führen Daten zu verwenden, Mapper statt
Wenn überhaupt, es das Schreiben von Abfragen erleichtert. Ich finde die normale MySQL-Syntax Syntaxfehler anfällig ist (kein Fehler, aber meine eigenen) und mit der CI aktiven Datensatz Syntax dies selten mit mir passiert.
Active Record ist eine der coolsten Features in CI IMHO
Active Record ist ein ORM - Sie einen Blick auf das Objekt-Relation Mapping-Technik genommen haben? Ich denke, wenn Sie ORM verstehen, werden Sie anfangen, die Vorteile zu sehen.