Ich würde gerne von denen hören, die Doctrine 2 (oder neuer) und Propel 1.5 (oder neuer) verwendet haben. Die meisten Vergleiche zwischen diesen beiden objektrelationalen Mappern basieren auf alten Versionen - Doctrine 1 versus Propel 1.3 / 1.4 - und beide ORMs wurden in ihren letzten Überarbeitungen erheblich überarbeitet. Zum Beispiel scheint sich die meiste Kritik an Propel auf die "ModelName Peer " -Klassen zu konzentrieren, die in jedem Fall in 1.5 veraltet sind.
Folgendes habe ich bisher gesammelt (und ich habe versucht, diese Liste so ausgewogen wie möglich zu gestalten ...):
- Treiben
- Vorteile
- Sehr IDE-freundlich, da der eigentliche Code generiert wird, anstatt sich auf magische PHP-Methoden zu verlassen. Dies bedeutet, dass IDE-Funktionen wie die Code-Vervollständigung tatsächlich hilfreich sind.
- Schnell (In Bezug auf die Datenbanknutzung wird keine Introspektion zur Laufzeit für die Datenbank durchgeführt.)
- Saubere Migration zwischen Schemaversionen (mindestens in der Beta 1.6)
- Kann PHP 5.3 Modelle generieren (zB Namespaces)
- Einfache Verkettung vieler Dinge in einer einzelnen Datenbankabfrage mit
useXxx
Methoden. (Siehe das Video "Code-Vervollständigung" oben)
- Nachteile
- Erfordert einen zusätzlichen Build-Schritt, nämlich das Erstellen der Modellklassen.
- Der generierte Code muss jedes Mal neu erstellt werden, wenn die Propel-Version geändert, eine Einstellung geändert oder das Schema geändert wird.
Dies ist für einige möglicherweise nicht intuitiv, und benutzerdefinierte Methoden, die auf das Modell angewendet werden, gehen verloren. (Ich denke?)- Nicht wahr; Benutzerdefinierte Methoden gehen nicht verloren, da die generierte Klasse eine Basisklasse ist. Propel stellt eine Entitätsklasse speziell für die Erweiterung bereit. - Einige nützliche Funktionen (z. B. Versionsverhalten, Schema-Migrationen) befinden sich im Beta-Status.
- Vorteile
- Lehre
- Vorteile
- Bekannter
- Doctrine Query Language kann möglicherweise kompliziertere Beziehungen zwischen Daten ausdrücken, als dies mit der ActiveRecord-Strategie von Propel ohne Weiteres möglich ist.
- Im Vergleich zu Propel ist es einfacher, wiederverwendbare Verhaltensweisen hinzuzufügen.
- DocBlock-basiertes Kommentieren zum Erstellen des Schemas wird anstelle einer separaten XML-Datei in das eigentliche PHP eingebettet.
- Verwendet überall PHP 5.3 Namespaces
- Nachteile
- Erfordert das Erlernen einer völlig neuen Programmiersprache (Doctrine Query Language)
- An mehreren Stellen mit "magischen Methoden" implementiert, wodurch die automatische Vervollständigung der IDE wertlos wird.
- Erfordert Datenbank-Introspection und ist daher standardmäßig etwas langsamer als Propel. Zwischenspeichern kann dies beseitigen, aber das Zwischenspeichern erhöht die Komplexität erheblich.
- Die Kerncodebasis enthält weniger Verhaltensweisen. Einige Funktionen, die Propel standardmäßig bereitstellt (z. B. "Verschachteltes Set"), sind nur über Erweiterungen verfügbar.
- Freakin RIESIG :)
- Vorteile
Dies habe ich allerdings erst durch Lesen der Dokumentation für beide Tools herausgefunden - ich habe eigentlich noch nichts gebaut.
Ich würde gerne von denen hören, die beide Tools verwendet haben, um ihre Erfahrungen mit den Vor- und Nachteilen der einzelnen Bibliotheken auszutauschen, und was ihre Empfehlung an dieser Stelle ist :)