Mi piacerebbe avere notizie da coloro che hanno usato Doctrine 2 (o successive) e Propel 1.5 (o successive). La maggior parte dei confronti tra questi due mappatori relazionali di oggetti si basano su vecchie versioni - Doctrine 1 contro Propel 1.3 / 1.4 ed entrambi gli ORM hanno subito riprogettazioni significative nelle loro recenti revisioni. Ad esempio, la maggior parte delle critiche a Propel sembra concentrarsi sulle classi "ModelName Peer ", che sono comunque deprecate in 1.5.
Ecco cosa ho accumulato finora (e ho cercato di rendere questo elenco il più equilibrato possibile ...):
- Propel
- Professionisti
- Estremamente intuitivo per IDE, poiché viene generato il codice effettivo, anziché fare affidamento sui metodi magici PHP. Ciò significa che le funzionalità IDE come il completamento del codice sono effettivamente utili.
- Veloce (in termini di utilizzo del database - nessuna introspezione di runtime viene eseguita sul database)
- Migrazione pulita tra le versioni dello schema (almeno nella 1.6 beta)
- Può generare modelli PHP 5.3 (es. Spazi dei nomi)
- Facile concatenare molte cose in una singola query di database con
useXxx
metodi come i metodi. (Vedi il video "completamento del codice" sopra)
- Contro
- Richiede un ulteriore passaggio di creazione, ovvero la creazione delle classi del modello.
- Il codice generato deve essere ricostruito ogni volta che la versione di Propel viene modificata, un'impostazione viene modificata o lo schema cambia.
Ciò potrebbe non essere intuitivo per alcuni e i metodi personalizzati applicati al modello vanno persi. (Penso?)- Non è vero; i metodi personalizzati non vanno persi perché la classe generata è una classe base; Propel fornisce una classe di entità specificamente per l'estensione. - Alcune funzioni utili (ad es. Comportamento della versione, migrazioni dello schema) sono in stato beta.
- Professionisti
- Dottrina
- Professionisti
- Più popolare
- Doctrine Query Language può esprimere relazioni potenzialmente più complicate tra i dati di quanto sia facilmente possibile con la strategia ActiveRecord di Propel.
- È più facile aggiungere comportamenti riutilizzabili rispetto a Propel.
- I commenti basati su DocBlock per la creazione dello schema sono incorporati nel PHP effettivo anziché in un file XML separato.
- Utilizza PHP 5.3 Spazi dei nomi ovunque
- Contro
- Richiede l'apprendimento di un linguaggio di programmazione completamente nuovo (Doctrine Query Language)
- Implementato in termini di "metodi magici" in diversi punti, rendendo inutile il completamento automatico dell'IDE.
- Richiede introspezione del database e quindi è leggermente più lento di Propel per impostazione predefinita; la memorizzazione nella cache può rimuovere ciò, ma la memorizzazione nella cache aggiunge una notevole complessità.
- Meno comportamenti sono inclusi nella base di codice di base. Diverse funzionalità fornite da Propel (come il set nidificato) sono disponibili solo tramite le estensioni.
- Freakin 'ENORME :)
- Professionisti
Questo l'ho raccolto anche solo leggendo la documentazione disponibile per entrambi gli strumenti: non ho ancora creato nulla.
Mi piacerebbe avere notizie da coloro che hanno utilizzato entrambi gli strumenti, per condividere la loro esperienza sui pro / contro di ciascuna libreria e su quale sia la loro raccomandazione a questo punto :)