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?

verwenden

Vielen Dank im Voraus

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top