Utilizzo di PDO per la gestione dei dati

0

Questa domanda è più una domanda orientata al design che una domanda specifica del codice. Sono nuovo di PHP e sto pensando di usare PDO come livello di accesso ai dati. Ad esempio, ho una classe chiamata CITY. Ora se ho bisogno di creare un'istanza di questa classe, qual è la tecnica migliore.

  • Dovrebbe avere una classe di accesso DB singleton che viene utilizzata per scrivere e leggere i dati dal livello db.
  • O dovrei delegarlo al singolo oggetto della classe. Ad esempio, se invoco city.save () (city è una classe), la classe city gestirà il salvataggio dei dati dell'oggetto di quella città nel database.

Scusa la mia ignoranza ma ho uno sfondo java e quindi cerco di capire qual è il miglior principio di progettazione per la gestione dei dati quando si utilizza php.

    
posta 03.06.2012 - 17:29
fonte

2 risposte

1

Temo non ci sia una risposta definitiva, dipende dal progetto a portata di mano.

Ho riflettuto sulla stessa domanda del tuo per il mio progetto. Alla ricerca di una risposta ho guardato alcuni libri PHP e secondo George Schlossnagle in 'Advanced PHP Programming' ci sono tre opzioni possibili:

1) Utilizzo del pattern Active Record : la classe si occupa di salvare i suoi dati nel database. Molto utile se la classe ha una corrispondenza semplice con le singole righe della tabella, ma è più difficile da utilizzare se la tua classe dipende dai dati di più tabelle

2) Utilizzo del pattern Mapper : una classe (il Mapper) gestisce il database e l'altra classe, ad esempio la classe User riguarda solo l'oggetto Utente stesso. Fondamentalmente il Mapper mappa la classe User per la struttura del database.

3) Una combinazione di entrambi, che Schlossnagle chiama "Integrated Mapper"

Personalmente avrei una classe che si occupa delle semplici basi del PDO: connettersi con il database ed eseguire una query. In pratica, assicurati di utilizzare le tue credenziali DB in un unico posto. Tutte le query specifiche dell'oggetto le avrei trattate nella classe dell'oggetto, dal momento che i dati dell'oggetto sono strettamente collegati alla struttura del database, quindi se la struttura della classe cambia la struttura del database probabilmente deve anche adattarsi a tali cambiamenti. E viceversa. Quindi mi sto proponendo di utilizzare una combinazione di pattern Active Record e Mapper.

Spero che questo ti aiuti a formulare la tua soluzione.

    
risposta data 17.06.2012 - 17:36
fonte
-2

Java

Benvenuti in un linguaggio, a mio avviso, meno confuso e meno ridondante. Molto di ciò che sai da Java può essere trasferito a PHP, le teorie e gli schemi di progettazione saranno tutti uguali, come lo è per la maggior parte, se non tutte, le lingue.

"Dovrebbe avere una classe di accesso DB singleton che viene utilizzata per scrivere e leggere dati dal livello db."

Probabilmente il metodo più "sicuro". Non l'ho fatto da solo, soprattutto perché non ho ancora avuto la possibilità di giocare con PDO o MYSQL, ma ne ho letto abbastanza e questo sembra essere il metodo preferito. È pratica comune limitare l'istanza delle classi DB per controllarne il flusso e una classe singleton sarebbe perfetta per questo.

Qui è la parte pertinente di un articolo decente sull'argomento. Questa è la seconda pagina della terza parte di una serie multipart. Se sei interessato al resto dovrebbe essere collegato nella casella "Vedi anche". Mentre questo è relativamente vecchio, dovrebbe essere ancora pertinente in quanto non credo che la teoria sia cambiata. Spero che questo aiuti!

    
risposta data 04.06.2012 - 15:45
fonte

Leggi altre domande sui tag