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 :)
Réponses:
Malgré la tendance actuelle à recommander Doctrine, je dois dire le contraire. Gardez à l'esprit que mes préférences personnelles sont également orientées vers mes expériences personnelles, mais comment @Dan a dit, elles sont toutes les deux très puissantes.
Je n'aime pas Doctrine pour plusieurs des raisons que vous avez mentionnées auparavant, comme la taille et l'ensemble des méthodes de magie sont les ruptures avec moi. Donc, j'utilise Propel , pourquoi? principalement parce que c'est la simplicité, et parce que simple dans le développement de logiciels est bon . Ma conviction personnelle est que devenir gourmand avec des designs est mauvais.
En utilisant Propel, j'ai réussi à implémenter une implémentation de modèle de référentiel pour mes propres systèmes, et cela fonctionne très bien, sans parler des performances de Propel, qui est l'un des ORM les plus rapides que j'ai vus.
Donc, ma réponse de base est Propel , car il accomplit un bon logiciel avec moins de code et permet à l'EDI de vous fournir une bonne intelligence sans perdre l'intérêt du logiciel ORM qui se connecte à la base de données et le fait bien ...
J'espère pouvoir vous aider
la source
Vos informations sur Doctrine 2 sont fausses ...
Je n'ai jamais utilisé Propel auparavant, mais Doctrine 2 est beaucoup plus récente et a une base de code de très haute qualité. Mais il semble que Propel utilise Active Record, Doctrine 2 utilise le modèle Data Mapper.
L'inconvénient de Doctrine 2 étant plus récente est le manque d'exemples de tiers, mais elle s'accumule rapidement.
Je recommande Doctrine 2 ...
la source
__get
et__set
(ce qui est vrai) plutôt que sur de vraies méthodes.D'après vos commentaires, il semble que vous essayez de choisir Propel ou Doctrine pour remplacer ou répondre à votre besoin d'un ORM dans une application héritée.
Cela étant dit, je pense qu'il est important de ne pas perdre de vue que le passage à l'un ou l'autre pourrait être une grande amélioration pour votre application. Donc, il n'y a pas vraiment de mauvaise réponse.
Par conséquent, la solution que vous choisissez dépend en grande partie de vos préférences en fonction de vos réponses aux questions suivantes:
Personnellement, je recommanderais Doctrine 2 en raison de sa communauté, de sa documentation et de son architecture.
la source
Je vous recommande Propel car il est bien intégré, rapide et puissant. Générer du code est préférable à charger des classes lors de l'exécution, cela facilite les étapes de débogage et vous montre ce que vous avez créé. Donc, l'étape de construction n'est pas un problème.
Doctrine2 n'a aucun comportement officiel, et le modèle de conception DataMapper est cool mais difficile à utiliser dans la vie réelle. Oh et DQL est un langage douloureux, mais aborder à apprendre ...
Si vous voulez penser avec des objets (pas de DQL / SQL / quoi que ce soit), choisissez Propel.
Doctrine2 fait partie de Symfony2 de facto mais les choses vont bouger très prochainement, regardez le dernier article de Fabien Potencier.
À la vôtre, William
la source
Ils sont tout les deux très bien. Il y a des cas extrêmes dans lesquels l'un peut faire quelque chose, ou faire quelque chose de mieux, que l'autre. Partout où j'ai rencontré des problèmes avec l'un ou l'autre, cela était dû plus à mon manque de connaissances qu'à quelque chose qu'ils ne pouvaient pas faire.
Cela signifie que la documentation et le support sont plus importants que la capacité intrinsèque du code. Connaissez-vous quelqu'un qui peut vous aider lorsque vous rencontrez des problèmes? Comment vous débrouillez-vous avec la documentation? Est-ce que l'un d'entre eux «semble» plus naturel pour vous?
la source
J'ai choisi Propel 1.63 pour une grande application mysql héritée (environ 200 tables) - les facteurs ici inclus: le support IDE qui permet aux nouveaux développeurs de trouver facilement leur chemin avec l'achèvement du code; prise en charge des schémas de bases de données croisées, performances; un meilleur support natif pour les énumérations et l'utilisation de plusieurs comportements. En fait, j'ai commencé avec Doctrine, car c'était le meilleur supporté par Symfony2, mais une fois que Propel a considérablement amélioré son support avec Symfony (la prochaine plate-forme vers laquelle je migrerai finalement), j'ai changé en raison de la meilleure gestion des problèmes ci-dessus. Pas de regrets du tout Propel est un vainqueur décisif.
la source