Il migliore ORM per PHP: Doctrine o Propel?
Vi dico fin da subito che non avrete la risposta alla domanda in oggetto ma ciò ci darà comunque l’occasione di capire quali sono le maggiori differenze tra i due più famosi ORM per PHP: Doctrine e Propel.
Per chi non sapesse cosa è un ORM, ecco qui la definizione:
Object-relational mapping (ORM, O/RM, and O/R mapping) in computer science is a programming technique for converting data between incompatible type systems in object-oriented programming languages.
Se vogliamo farla semplice (con le dovute semplificazioni) un ORM ci permette di avere una rappresentazione ad oggetti del database facilitando di molto le interrogazioni CRUD ma non solo (possiamo quindi usufruire di metodi getter e setter creati automaticamente, sfruttare al meglio le relazioni tra gli oggetti, ecc…).
La prima release di Doctrine risale al 2008 ed è in continua evoluzione (attualmente è alla versione 2), le sue caratteristiche principali sono:
- Il pattern utilizzato è Data Mapper e quindi la persistenza degli oggetti è gestita da una classe esterna;
- Costruito sopra il Database Abstraction Layer (DBAL): un livello posto sopra PDO offrendo un API intuitiva e flessibile per comunicare con il database;
- Possibilità di utilizzare Doctrine Query Language (DQL) cioè delle query sugli oggetti rappresentanti i modelli (quindi non direttamente sulle tabelle).
Propel è nato nel lontano 2003 ed attualmente è alla versione 2, ciò che lo distingue sostanzialmente da Doctrine è il pattern utilizzato cioè Active Record dove sono gli stessi oggetti a gestire la propria persistenza.
Entrambi gli ORM hanno poi delle funzionalità avanzate tipo la gestione dei behaviors (cioè la possibilità di eseguire delle operazioni automatiche in fase di creazione, modifica ed eliminazione degli oggetti), la validazione dei dati e molto altro ancora.
Se vogliamo andare dritti alla questione, non esiste un ORM perfetto in assoluto ma dipende sempre dal progetto che si ha di fronte; generalizzando ed approssimando il tutto si può affermare che Doctrine risulta più adatto per database più grandi e complessi mentre Propel risulta più fluido per operazioni CRUD (questa scelta è quindi dettata principalmente dal pattern utilizzato: Data Mapper e Active Record).