Mi piacerebbe sentire chi ha usato Doctrine 2 (o versioni successive) e Propel 1.5 (o versioni 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, e entrambe le ORM hanno subito significative riprogettazioni nelle loro recenti revisioni. Ad esempio, la maggior parte delle critiche di Propel sembra centrare attorno alle classi "ModelName Peer ", che sono in ogni caso deprecate in 1.5.
Ecco cosa ho accumulato finora (e ho cercato di rendere questo elenco il più equilibrato possibile ...):
- Propel
- Pro
- Estremamente IDE amichevole, perché viene generato un codice reale, invece di affidarsi ai metodi magici di 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)
- Pulisci la migrazione tra versioni dello schema (almeno nella versione 1.6 beta)
- Può generare modelli PHP 5.3 (ad esempio, namespace)
- Facile integrazione di molte cose in una singola query di database con metodi come
useXxx
. (Vedi il video "completamento codice" sopra)
- Contro
- Richiede un ulteriore passaggio di build, ovvero la creazione delle classi del modello.
- Il codice generato deve essere ricostruito ogni volta che viene modificata la versione di Propel, viene modificata un'impostazione o lo schema cambia.
Questo potrebbe non essere intuitivo per alcuni e i metodi personalizzati applicati al modello sono persi. (Penso?)- Non è vero; i metodi personalizzati non vengono persi perché la classe generata è una classe base; Propel fornisce una classe di entità specifica per l'estensione. - Alcune funzioni utili (ovvero il comportamento della versione, le migrazioni dello schema) sono in stato beta.
- Pro
- Dottrina
- Pro
- Più popolare
- Doctrine Query Language è in grado di esprimere relazioni potenzialmente più complicate tra i dati rispetto a quelle facilmente possibili 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 Namespace ovunque
- Contro
- Richiede l'apprendimento di un linguaggio di programmazione completamente nuovo (Doctrine Query Language)
- Implementati in termini di "metodi magici" in diversi punti, rendendo inutile il completamento automatico dell'IDE.
- Richiede l'introspezione del database e quindi è leggermente più lento di Propel per impostazione predefinita; la memorizzazione nella cache può rimuovere questo, ma la memorizzazione nella cache aggiunge notevole complessità.
- Sono presenti meno comportamenti nella base di codice principale. Diverse funzionalità offerte da Propel (come il set nidificato) sono disponibili solo tramite le estensioni.
- Freakin 'ENORME:)
- Pro
Questo l'ho trovato solo leggendo la documentazione disponibile per entrambi gli strumenti - non ho ancora realizzato nulla.
Mi piacerebbe sentire da coloro che hanno usato entrambi gli strumenti, per condividere la loro esperienza sui pro / contro di ciascuna libreria, e qual è la loro raccomandazione a questo punto:)