Home PHP Introduction à Propel 2 par William Durand

Introduction à Propel 2 par William Durand

  André, Architecte technique PHP 5 min 18 juin 2012

Le nouveau Lead Developper William Durand (@couac) a présenté la future version de l’ORM Propel. La conférence ne s’adressait pas uniquement aux nouveaux utilisateurs Propel, car elle était divisée en deux parties :

  • présentation de Propel 1.6
  • présentation de Propel 2

Cette nouvelle version est une refactorisation complète de l’ORM Propel 1.6, qui lui même est déjà porté en PSR-0.

Pour rappel, PSR-0 a pour but d’éviter la mise en œuvre de plusieurs mécanismes d’auto-chargement de classes lorsque l’on utilise des composants provenant de projets différents. Ce mécanisme se base sur un certain nombre de règles concernant à la fois le nom des fichiers, leur contenu ainsi que leur organisation.

Nombre de personnes associent Propel à un ORM Active Record, mais ce n’est pas le cas, les concepts de table et l’enregistrement sont séparés. On y retrouve même l’API Active Query qui permet d’écrire les requêtes SQL comme des phrases.

 

Par exemple :

 

<?php

use Acme\Job;

$jobs = JobQuery::create()
       ->_if(preg_match('/^[A-Z]{2}$/', $location))
             ->filterByCanton($location)->
       ->_else()
             ->filterByCity($location)->
       ->_endif()
       ->find();

 

A la différence de Doctrine 2 (l’autre acteur du marché des ORM PHP), Propel 2 reste sur de la génération de code et se veut ainsi être plus rapide, facilitant ainsi  les développements.

Propel utilise également beaucoup de Behaviors (portion de code réutilisable dont on dispose dans nos fonctions métier), tels que :

  • l’archivage : fonctionne sur le model du soft-delete. Avec ce système l’objet supprimé est alors déplacé dans une autre table, ce qui a un impact sur les tables contenant des milliers d’entrées car cela réduit le nombre de données à traiter.
  • Nested set : qui permet de représenter des données hiérarchisées dans une base de données relationnelle.
  • Géocodable : qui permet de localiser une entrée automatiquement si les champs street et city ont été définis et renseignés.
  • Mais bien d’autres encore comme Agregate Colum, Delegate, i18n, Timestampable, Sortable, etc

Tous les behaviors sont disponibles depuis Propel 1.6 et font désormais partie du corps. De ce fait, ils seront toujours maintenus dans la nouvelle version.

Un autre avantage de Propel, qui a un impact direct sur les temps de réponse, est la pré-génèreration de requêtes SQL. Par exemple pour les recherches par clef primaire.

Pour cette nouvelle version de Propel, l’équipe s’est essentiellement concentré sur le cœur de métier, c’est-à-dire l’ORM, et a décidé de réutiliser des composants proposés par la communauté. Notamment  les 5 composants Symfony2 suivants :

Ce qui à permis de supprimer beaucoup de code existant et de l’homogénéiser. Par exemple si on n’utilise pas le validator Propel, on n’a pas de code généré évitant ainsi de polluer le code. Il ne sera présent que si on en a vraiment besoin. Il faut également noter que les tables et relations se décrivent toujours en XML.

Depuis 2005, la rédaction de la documentation de Propel n’a cessé de croître. Pour cette nouvelle version, nous aurons le droit à une documentation totalement réécrite, et cerise sur le gâteau, l’équipe a prévu de la traduire dans toutes les langues. Affaire à suivre !

Reste à attendre la très prochaine version alpha release prévue courant de l’été 2012 afin de se faire notre propre opinion.

Vous pourrez retrouver les slides de cette conférence ici :

https://speakerdeck.com/u/willdurand/p/introduction-to-propel2

Lire les articles similaires

1 commentaire

theshadoo 4 octobre 2014 - 01:05 |

Merci pour l’article, même si aujourd’hui Propel 2 est sortie en version final et avec sa documentation depuis plusieurs mois déjà.
J’affectionne tout particulièrement propel.
Car effectivement sous Symfony2, Doctrine 2 a été déclaré comme l’ORM natif du framework, j’aime bien doctrine, mais très sincèrement, ayant eu l’occasion de travailler sous SF2 entre les deux ORM, je trouve que doctrine manque beaucoup de fonctionnalité en rapport à propel, donc ce dernier, comme vous le dites, va s’occuper de générer une bonne partie du code dont on a l’habitude d’utiliser les requêtes courantes.
En plus je souhaitais organiser mes classes de propel dans des dossiers, avec le schéma xml cela s’est fait automatiquement avec les use automatiquement formaté comme il fallait.
Lorsque l’on travaille avec de nombreuses tables de la base de donnée (300), il devient important d’avoir les classes de bases classés dans de dossiers. C’est plus lisible plutôt que d’avoir tout à la racine des models.
Enfin, vraiment top je trouve, j’espère que de plus en plus de dév symfony le réutiliseront car par habitude et mode, les personnes se dirigent vers le plus « populaire » mais pas forcément le plus indiqué.

Répondre

Laisser un commentaire

Social Share Buttons and Icons powered by Ultimatelysocial