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 :)
Antworten:
Trotz des gegenwärtigen Trends, Doctrine zu empfehlen, muss ich etwas anderes sagen. Denken Sie daran, dass sich meine persönlichen Vorlieben auch an meinen persönlichen Erfahrungen orientieren, aber wie @Dan sagte, sind sie beide sehr wirkungsvoll.
Ich weiß nicht , wie Lehre für einige der Gründe , bevor Sie erklärt, wie die Größe und die ganzen magischen Methoden THINGY die sind Dealbreaker mit mir. Also, ich benutze Propel , warum? hauptsächlich, weil es einfach ist und weil einfach in der Softwareentwicklung gut ist . Mein persönlicher Glaube ist, dass es schlecht ist, mit Designs gierig zu werden.
Mit Propel habe ich es geschafft, eine Repository-Musterimplementierung für meine eigenen Systeme zu implementieren , und es funktioniert wirklich gut, ganz zu schweigen von der Leistung von Propel, einem der schnellsten ORMs, die ich je gesehen habe.
Meine grundlegende Antwort ist Propel , weil es eine gute Software mit weniger Code liefert und die IDE in die Lage versetzt, Ihnen ein gutes Verständnis zu vermitteln, ohne den Punkt der ORM-Software zu verlieren, die eine Verbindung mit der Datenbank herstellt und es gut macht ...
Hoffe ich kann helfen
quelle
Ihre Angaben zu Doctrine 2 sind falsch ...
Ich habe Propel noch nie benutzt, aber Doctrine 2 ist viel neuer und hat eine wirklich hochwertige Codebasis. Aber es sieht so aus, als ob Propel Active Record verwendet, Doctrine 2 verwendet das Data Mapper-Muster.
Der Nachteil von Doctrine 2, das neuer ist, ist das Fehlen von Beispielen von Drittanbietern, aber es baut sich schnell auf.
Ich empfehle Doctrine 2 ...
quelle
__get
und__set
(was wahr ist) und nicht auf echten Methoden basiert .Aus Ihren Kommentaren geht hervor, dass Sie versuchen, Propel oder Doctrine auszuwählen, um Ihren Bedarf an ORM in einer Legacy-Anwendung zu ersetzen oder zu erfüllen.
Abgesehen davon denke ich, dass es wichtig ist, die Tatsache nicht aus den Augen zu verlieren, dass der Wechsel zu einem der beiden eine große Verbesserung für Ihre Anwendung sein könnte. Es gibt also keine wirklich falsche Antwort.
Daher hängt die von Ihnen gewählte Lösung weitgehend von Ihren Präferenzen ab, basierend auf Ihren Antworten auf die folgenden Fragen:
Ich persönlich würde Doctrine 2 aufgrund seiner Community, Dokumentation und Architektur empfehlen .
quelle
Ich empfehle Ihnen Propel, weil es gut integriert, schnell und leistungsstark ist. Das Generieren von Code ist besser als das Laden von Klassen zur Laufzeit. Es vereinfacht die Debug-Schritte und zeigt Ihnen, was Sie erstellt haben. Der Build-Schritt ist also kein Problem.
Doctrine2 hat keine offiziellen Verhaltensweisen, und das DataMapper-Entwurfsmuster ist cool, aber im wirklichen Leben schwer zu verwenden. Oh und DQL ist ein Schmerz, aber eine abenteuerliche Sprache zu lernen ...
Wenn Sie mit Objekten denken möchten (kein DQL / SQL / was auch immer), wählen Sie Propel.
Doctrine2 ist ein Teil von Symfony2 de facto, aber die Dinge werden sich sehr bald ändern, siehe den letzten Artikel von Fabien Potencier.
Prost, William
quelle
Sie sind beide sehr gut. Es gibt einige Randfälle, in denen man etwas tun oder etwas besseres tun kann als der andere. Wo auch immer ich Probleme hatte, lag es mehr an meinem Unwissen als an etwas, was sie nicht konnten.
Dies bedeutet, dass Dokumentation und Support wichtiger sind als die eigentlichen Fähigkeiten des Codes. Kennen Sie jemanden, der Ihnen bei Problemen helfen kann? Wie gut verstehen Sie sich mit der Dokumentation? Fühlt sich einer von ihnen für Sie "natürlicher" an?
quelle
Ich entschied mich für Propel 1.63 für eine große ältere MySQL-Anwendung (ca. 200 Tabellen) - die hier genannten Faktoren: IDE-Unterstützung, mit der neue Entwickler sich mit Code-Vervollständigung leicht zurechtfinden können; datenbankübergreifende Schemaunterstützung, Leistung; Bessere native Unterstützung für Aufzählungen und die Verwendung mehrerer Verhaltensweisen. Eigentlich habe ich mit Doctrine angefangen, da dies von Symfony2 am besten unterstützt wurde, aber nachdem Propel die Unterstützung für Symfony (die nächste Plattform, auf die ich irgendwann migrieren werde) erheblich verbessert hatte, wechselte ich aufgrund der besseren Behandlung der oben genannten Probleme. Überhaupt kein Bedauern Propel ist ein entscheidender Gewinner.
quelle