J'aimerais entendre ceux qui ont utilisé Doctrine 2 (ou version ultérieure) et Propel 1.5 (ou version ultérieure). La plupart des comparaisons entre ces deux mappeurs relationnels d'objets sont basées sur d'anciennes versions - Doctrine 1 contre Propel 1.3 / 1.4, et les deux ORM ont subi des remaniements importants dans leurs révisions récentes. Par exemple, la plupart des critiques de Propel semblent se concentrer sur les classes "ModelName Peer ", qui sont en tout cas obsolètes en 1.5.
Voici ce que j'ai accumulé jusqu'à présent (et j'ai essayé de rendre cette liste aussi équilibrée que possible ...):
- Propulser
- Avantages
- Extrêmement convivial IDE, car le code réel est généré, au lieu de s'appuyer sur des méthodes magiques PHP. Cela signifie que les fonctionnalités IDE telles que la complétion de code sont réellement utiles.
- Rapide (en termes d'utilisation de la base de données - aucune introspection d'exécution n'est effectuée sur la base de données)
- Migration propre entre les versions de schéma (au moins dans la version bêta 1.6)
- Peut générer des modèles PHP 5.3 (c'est-à-dire des espaces de noms)
- Facile à enchaîner beaucoup de choses en une seule requête de base de données avec des choses comme des
useXxx
méthodes. (Voir la vidéo "Achèvement du code" ci-dessus)
- Les inconvénients
- Nécessite une étape de construction supplémentaire, à savoir la construction des classes de modèles.
- Le code généré doit être reconstruit chaque fois que la version de Propel est modifiée, un paramètre est modifié ou le schéma change.
Cela peut ne pas être intuitif pour certains et les méthodes personnalisées appliquées au modèle sont perdues. (Je pense?)- Pas vrai; les méthodes personnalisées ne sont pas perdues car la classe générée est une classe de base; Propel fournit une classe d'entité spécifiquement pour l'extension. - Certaines fonctionnalités utiles (comportement de version, migrations de schéma) sont en version bêta.
- Avantages
- Doctrine
- Avantages
- Plus populaire
- Doctrine Query Language peut exprimer des relations entre les données potentiellement plus compliquées que cela n'est possible avec la stratégie ActiveRecord de Propel.
- Plus facile d'ajouter des comportements réutilisables par rapport à Propel.
- Les commentaires basés sur DocBlock pour la construction du schéma sont intégrés dans le PHP réel au lieu d'un fichier XML séparé.
- Utilise des espaces de noms PHP 5.3 partout
- Les inconvénients
- Nécessite l'apprentissage d'un tout nouveau langage de programmation (Doctrine Query Language)
- Implémenté en termes de "méthodes magiques" à plusieurs endroits, rendant la saisie semi-automatique IDE sans valeur.
- Nécessite une introspection de la base de données et est donc légèrement plus lent que Propel par défaut; la mise en cache peut supprimer cela, mais la mise en cache ajoute une complexité considérable.
- Moins de comportements sont inclus dans la base de code principale. Plusieurs fonctionnalités proposées par Propel (telles que l'ensemble imbriqué) ne sont disponibles que via des extensions.
- Freakin 'HUGE :)
- Avantages
J'ai glané cela seulement en lisant la documentation disponible pour les deux outils - je n'ai encore rien construit.
J'aimerais toutefois entendre ceux qui ont utilisé les deux outils pour partager leur expérience sur les avantages / inconvénients de chaque bibliothèque et quelle est leur recommandation à ce stade :)