devlop78
Invité n'ayant pas de compte PHPfrance
07 mars 2011, 02:32
Bon, je me suis mis à Propel, et je ne suis pas déçu
Donc, avantages, déjà la rapidité d'écriture. Ensuite, Propel plutôt que Doctrine pour les validateurs. Doctrine en possèdent mais il ne parait pas possible de savoir quel contrainte a été violée. Pour Propel, une contrainte de validation = un message. Ainsi, il est facile d'écrire "le nom d'utilisateur doit etre compris entre 10 et 15 caractères", et hop, on peut injecter le message partout :p Gros avantages si un jour on veut changer cette règle.
Ensuite, dans le XML on peut déclarer un champs comme unique. Je l'avais fait coté base de données, et j'ai eu une exception PDO. C'est super. Avec les validations, c'est Propel qui va vérifier avant et renvoie une erreur Propel. On peut donc dissocier "l'erreur" ou plutot la violation de validation Propel de l'erreur PDO.
Ensuite, un objet créé par exemple, on accède facilement à son identifiant généré. Si on fait une recherche d'une ligne à partir de cet identifiant, Propel nous retourne le même objet que celui créé. On a donc une seule instance, ce qui est cohérent. Pareil pour les listes, elles se mettent à jour en cas d'ajout ou de suppression, alors même que l'on ne le communique pas à la liste. Il faudra que je fasse les tests en cas de suppression en CASCADE de bdd, bien sûr en le déclarant.
A l'instant, je viens de regarder (et c'était l'une de mes interrogations) deux choses : charge-t-il les références à la création de l'instance, ou à l'appel de l'accesseur approprié. C'est superbe, il ne le fait qu'à l'appel de l'accesseur. Donc une liste de livres pour un auteur donné ne se charge pas à la recherche d'un auteur.
La deuxieme chose : peut-on lui demander de ne pas chercher tous les champs pour une ligne. La réponse non testée mais indiquée dans la documentation : oui. C'est le "lazyLoad". Ainsi, le champs n'est cherché que lorsque l'accesseur est appelé. Ce qui m'arrange par exemple pour l'application actuelle où un champs mediumText est présent. Je n'en ai pas besoin tout le temps, et ce serait du gachis de bande passante que de d'aller le chercher. En réalité, c'est plus compliqué : j'ai besoin de savoir s'il est NULL ou pas. Propel gère des "behaviors" d'aggrégation etc, donc j'imagine qu'il y a moyen de créer un champs virtuel qui stockera cette info. Sinon, ce sera une requête sur-mesure.
Bref, partant du principe que des gros sites utilisaient des frameworks certainement assez gourmands (ils ne doivent pas se contenter de charger trois petites classes) avec des ORM, je peux moi aussi me le permettre pour mon application avec 2 personnes par jour ;p. Eventuellement, si on s'appelle Google, le framework n'est pas tellement approprié ...