|
Autor |
Nachricht |
boris
Beiträge: 11194
|
Titel: DLW 2008: ORMs, why should I care?
Verfasst am: Sa, 18 Apr 2009, 12:01 |
|
|
ORMs, why should I care?
Lukas Smith, LIIP
28.5.2008, 8:30, Raum 1.26, ca. 20 Personen
- ORM = Object-Relational Mapping
bezeichnet die Technik, Objekte aus einer objektorientierten Programmiersprache direkt in eine (relationale) Datenbank schreiben (und daraus wieder lesen) zu können.
Dieser Vortrag orientiert sich am ORM "Doctrine", an der der Referent mitenwickelt.
(Aus der Java-Welt ist z.B. "Hibernate" bzw. von .NET "NHibernate" bekannt)
- Vorteile von ORMs
Es werden keine Datenbank-Queries mehr direkt in den Code geschrieben, bei einer Portierung von einer Datenbank-Engine auf eine andere muss nur ein Flag umgestellt werden, der Code wird portabel (wobei 100% Kompatibilität ein Mythos ist).
Das aufwändige Umwandeln ("Mapping") aus der Objekt- in eine relationale Struktur entfällt. Business-Logik kann direkt auf Objekte aus der Datenbank angewendet werden.
Caching kann global oder per Query ein-/ausgeschaltet werden.
Das Datenmodell kann zentralisiert abgelegt / gepflegt werden.
Bestehende Modellklassen können durch Plugins einfach erweitert werden.
Nicht unterstützte Datenbank-Features werden emuliert (z.B. "LIMIT" in Subselects in mySQL).
Die für das Speichern nötige Datenbank-Struktur kann aus einer YAML-Datei (Feldbeschreibung, angelegt an XML) automatisch erstellt werden.
- Nachteile von ORMs
Es gibt immer einen gewissen "Overhead" (Mehr an Laufzeit / Code), der allerdings durch die deutlichen Vorteile kaum ins Gewicht fallen dürfte und durch Caching minimiert werden kann.
- Anwendungsmöglichkeiten
Queries können automatisch geändert werden (sog. "listener hooks", die beim Aufruf von Queries mit eigenem Code "einspringen"). So kann z.B. eine "DELETE"-Anweisung einfach per Flag in der Konfiguration automatisch in eine "UPDATE SET deleted = true"-Anweisung geändert werden (sog. "SoftDelete"), der Datensatz wird also nicht gelöscht sondern nur als gelöscht markiert.
Alle folgenden "SELECT"-Anweisungen (es sei denn, sie greifen auf das Feld "deleted" zu) werden dann automatisch mit "WHERE deleted = false" erweitert. So kann das Löschen von Datensätzen verhindert werden, die vom ORM gelieferten Ergebnisse verhalten sich aber (außer bei einer expliziten Abfrage danach) so, als seien die Datensätze wirklich nicht mehr vorhanden.
Daten können vor dem Speichern automatisch validiert werden.
"Lazy Loading": Objekt-Properties werden erst beim Zugriff darauf aus der Datenbank geholt. Mit "Load Related" werden alle zusätzlichen Felder der vorher geholten Objekte nachgeladen.
Das komplette und einfache Laden und Speichern eines kompletten "Trees" (Objekt-Hierarchie) aus/in der Datenbank.
Fazit: Sehr gut dargebotener, fundierter Vortrag, der teilweise auch Nachteile des vorgestellten ORM ansprach und kritisch beleuchtete (sehr selten auf der DLW, hier waren 90% der vorgestellten Sachen immer ausnahmslos super).
Ressourcen:
http://pooteeweet.org/files/ipc08spring/doctrine_orm.pdf
http://www.liip.ch
http://www.phpdoctrine.org
Programminfo:
Most PHP developers are followers of the KISS principle: keep it simple stupid! Not a bad idea at all. The result is that most PHP applications are easy to setup and maintain, much to the contrary of the average Java web application.
ORM, object relational mapper, do not seem to fit this mantra well. Worse yet they carry with them the stigmata of being associated with Java. The PHP world was therefore much more receptive of the more lightweight ActiveRecord approach that was popularized with Ruby on Rails.
However, the presenter of this talk, far from a Java lover, will try to pitch one of the more feature rich ORM for PHP to the audience. If that is not darin enough, it should be noted that the ORM that will be the focus of the talk is Doctrine, which has been heavily inspired by Java's most popular ORM Hibernate. After an introduction and several examples of very high level features of Doctrine, the audience will hopefully help round off this talk with a lively discussion at the end.
____________ beehave - home of humbug ... [we can't afford to be neutral]
|
|
Nach oben |
|
|
|
ähnliche Beiträge |
|
Thema
| Autor
| Forum
| Antworten
| Verfasst am
|
|
Sie hören gerade..... (2008) |
Frederik |
silikonimplantate |
153 |
Do, 17 Sep 2009, 22:48 |
|
DLW 2008: Understanding the PHP Object-Model |
boris |
hal9000 |
0 |
Sa, 18 Apr 2009, 12:27 |
|
DLW 2008: Advanced Object-Oriented JavaScript |
boris |
hal9000 |
0 |
Sa, 18 Apr 2009, 12:21 |
|
DLW 2008: Speaker Panel: Top Speakers from Ruby, Groovy |
boris |
hal9000 |
0 |
Sa, 18 Apr 2009, 12:16 |
|
DLW 2008: Metaprogramming with Ruby |
boris |
hal9000 |
0 |
Sa, 18 Apr 2009, 12:13 |
Schreiben: nein. Antworten: nein. Bearbeiten: nein. Löschen: nein. Umfragen: nein.
|