Ich beginne ein neues Projekt mit Symfony, das sich leicht in Doctrine und Propel integrieren lässt , aber ich muss natürlich eine Wahl treffen ... Ich habe mich gefragt, ob erfahrene Leute da draußen allgemeine Vor- und / oder Nachteile haben einer dieser beiden?
Vielen Dank.
EDIT: Danke für all die Antworten, nützliche Sachen. Es gibt keine wirklich richtige Antwort auf diese Frage, daher werde ich nur diejenige als genehmigt markieren, die die beliebtesten Up-Votes erhalten hat.
Antworten:
Ich würde mit Doctrine gehen. Es scheint mir, dass es ein viel aktiveres Projekt ist und als Standard-ORM für Symfony besser unterstützt wird (obwohl die ORMs offiziell als gleich angesehen werden).
Außerdem gefällt mir die Art und Weise, wie Sie mit Abfragen arbeiten (DQL anstelle von Kriterien), besser:
(Die Implementierung von Doctrine ist für mich viel intuitiver).
Außerdem bevorzuge ich die Art und Weise, wie Sie Beziehungen in Doctrine verwalten.
Ich denke, diese Seite aus der Doctrine-Dokumentation ist eine Lektüre wert: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained
Zusammenfassend: Wenn ich ein neues Projekt starten würde oder zwischen Doctrine und Propel wählen müsste, würde ich mich jeden Tag für Doctrine entscheiden.
quelle
Ich bin voreingenommen, da ich bei der nächsten Version von Propel ein wenig helfe, aber Sie müssen bedenken, dass Propel tatsächlich das erste verfügbare ORM war und dann etwas zurückblieb, als Doctrine erstellt wurde, aber jetzt wieder aktiv entwickelt wird. Symfony 1.3 / 1.4 wird mit Propel 1.4 geliefert, wobei die meisten Vergleiche bei Propel 1.3 enden. Außerdem wird die nächste Version von Propel (1.5) viele Verbesserungen enthalten, insbesondere bei der Erstellung Ihrer Kriterien (was dazu führt, dass Sie weniger Code schreiben müssen).
Ich mag Propel, weil es weniger komplex zu sein scheint als Doctrine: Der meiste Code befindet sich in den wenigen generierten Klassen, während Doctrine die Funktionalität in viele Klassen aufgeteilt hat. Ich möchte ein gutes Verständnis für die Bibliotheken haben, die ich benutze (nicht zu viel "Magie"), aber natürlich habe ich mehr Erfahrung mit Propel, also ist Doctrine hinter den Kulissen vielleicht nicht so kompliziert. Einige sagen, Propel sei schneller, aber Sie sollten dies selbst überprüfen und überlegen, ob dies andere Unterschiede überwiegt.
Vielleicht sollten Sie auch die Verfügbarkeit von Symfony-Plugins für die verschiedenen Frameworks berücksichtigen. Ich glaube, Propel hat hier einen Vorteil, aber ich weiß nicht, wie viele der aufgelisteten Plugins mit der neuesten Version von Symfony noch auf dem neuesten Stand sind.
quelle
Es kommt auf die persönlichen Vorlieben an. Ich benutze Propel, weil ich (unter anderem) die Tatsache mag, dass alles seine eigene konkrete Getter & Setter-Methode hat. In der Lehre ist dies nicht der Fall.
Treiben:
Lehre:
Der Grund, warum ich Getter & Setter mag, ist, dass ich alle Arten von Logik in sie einfügen kann, wenn ich muss. Aber das ist nur meine persönliche Präferenz.
Ich sollte auch hinzufügen, dass Propel, obwohl es sich in der Vergangenheit nur langsam bewegte, jetzt wieder aktiv entwickelt wird. In den letzten Monaten wurden mehrere neue Versionen veröffentlicht. Die neueste Version von Propel enthält eine "fließende Abfrageoberfläche" ähnlich der von Doctrine , sodass Sie keine Kriterien mehr verwenden müssen, wenn Sie dies nicht möchten.
quelle
Es soll beachtet werden , Lehre 2 ist
derzeit in der Entwicklungfreigegeben [ed] und Funktionen fast völlig verschieden von der aktuellen stabilen Version von Lehre 1. Es ist auf der Data Mapper Mustern anstelle von Active Record, und verwendet einen ‚Entity Manager‘ auf Griff Ausdauer beruht Logik. Wenn es veröffentlicht wird, ähnelt es eher dem Ruhezustand von Java (Doctrine 1 ähnelt eher dem ActiveRecord von Rails).Ich habe mich mit der Alpha-Version von Doctrine 2 entwickelt und muss sagen, dass sie über Doctrine 1 liegt (nur meine Meinung, und ich habe Propel noch nie verwendet). Die Chancen stehen gut, dass sich die Doctrine-Community bei ihrer Veröffentlichung darauf zubewegt.
Ich würde Sie ermutigen, sich Doctrine anzuschauen, aber wenn Sie den Active Record-Stil bevorzugen, den Propel und Doctrine jetzt verwenden, möchten Sie vielleicht einfach bei Propel bleiben.
quelle
Die beiden Referenzen sind etwas veraltet, so dass Sie dennoch einige allgemeine Aspekte behandeln. Grundsätzlich müssten Sie Ihre Erfahrungen mit dem Framework als solchem bewerten. Ein Hauptnachteil der Doktrin ist die Unfähigkeit, eine IDE zu haben, mit der Sie in diesem Propel automatisch codieren können Als Gewinner sind Lernkurven und Doktrin sehr unterschiedlich. Es ist einfacher zu treiben, wenn Ihr Projekt komplexe Datenmodelle verwalten muss. Verwenden Sie Doktrin, wenn Sie schnell mit einem ORM arbeiten möchten, das am besten dokumentiert ist und mehr Unterstützung in Propel findet Internetnutzung, ist viel ausgereifter und ich glaube, dass die meisten verwendet.
http://propel.posterous.com/propel-141-is-out
quelle
Ich würde vorschlagen, Propel 1.6 zu verwenden, das für die Autocomplete-Funktion von IDE besser ist.
quelle
Ich bin kein Benutzer von PHP 5-Nicht-Framework-ORM, aber hier sind einige gute Vergleichspostings (falls Sie sie noch nicht gesehen haben):
http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/
http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine
Beide Schlussfolgerungen bevorzugen Doctrine als neuere Generation von ORM für Symfony.
quelle
Nachdem ich beide einige Jahre lang verwendet habe, bevorzuge ich Propel 2 gegenüber Doctrine, einfach basierend darauf, wie Sie Ihre Abfragelogik erstellen. Die Lehre ist so tief wie möglich und die Verwaltung vieler Aspekte entspricht dieser Tiefe. Ich bin der Meinung, dass Propel eine flüssigere und objektorientiertere Methode zum Erstellen und Verwalten der Abfrageinteraktionen bietet.
Für mich führte dies zu weniger Code im Modell und mehr Strukturen, wie Logik verarbeitet werden kann / wird. Dies führte dazu, dass nur viele Interaktionen als gemeinsame Funktionalität aufgebaut wurden. (Immerhin werden 90% von dem, was Sie mit einer Datenbank machen werden, nur ein gewisser Grad an Rohbetrieb sein.)
Am Ende sind beide leistungsstark, überschaubar und erledigen die Arbeit. Meine persönlichen Projekte und Interessen verwenden Propel ORM 2 und zukünftige Projekte, wenn sie noch in PHP geschrieben sind, werden diesen Weg gehen.
Ich benutze beide seit 3-4 Jahren täglich.
quelle
Ich würde vorschlagen, das DbFinder Plugin zu verwenden . Dies ist eigentlich ein sehr leistungsfähiges Plugin, das beides unterstützt und ein ziemlich leistungsfähiges Plugin ist. Ich benutze es eigentlich besser als beide.
quelle
Wenn ich mich nicht irre, verwenden beide ORMs ein XML-basiertes Schema, und das Erstellen dieser Schemadefinition ist ziemlich umständlich. Wenn Sie ein PHP-basiertes einfaches Schema mit fließendem Stil benötigen. Sie können LazyRecord https://github.com/c9s/LazyRecord ausprobieren. Es unterstützt automatische Migrations- und Upgrade- / Downgrade- Skriptgeneratoren . Alle Klassendateien werden statisch ohne Laufzeitkosten generiert.
quelle