Devo creare una classe per le funzioni che utilizzano il database?

1

Ho un'applicazione PHP che è piuttosto semplice: consente all'utente di creare, modificare e leggere un post. Materiale di base.

Ho una classe Database che gestisce la connessione e l'esecuzione delle query. Il fatto è che voglio che i miei modelli (sto usando un framework MVC autocostruito) siano puliti, quindi ho creato in Database alcune funzioni come CreatePost() , EditPost() ecc., Che contiene tutto il necessario SQL , quindi posso chiamarli piacevolmente dal modello: $database->CreatePost(/* post data */); .

Devo mantenere quelle funzioni nella classe Database o dovrei inserirle altrove (diciamo una classe)? Forse dovrei anche rinunciare all'idea delle funzioni e scrivere esplicitamente il codice nel modello?

Modifica

la risposta è probabilmente basata sull'opinione pubblica, ma ancora - sto cercando di capire cosa farebbe la maggior parte delle persone secondo le convenzioni moderne ben accettate.

    
posta Sipo 21.10.2015 - 22:30
fonte

3 risposte

1

Avere il processo di creazione del modello nella classe del tuo database può sembrare una buona idea ora, ma sarà un problema quando decidi di cambiare il luogo in cui sono memorizzati i tuoi modelli.

La classe del database dovrebbe fornire solo un'interfaccia di base, come la query, la creazione di transazioni e / o il recupero dei dati in più modi (singolo, multi, associativo, ...).

Quindi crei una classe (preferibilmente implementando un'interfaccia generica), che utilizzerà la classe del database e la sua interfaccia per interrogare il db, e nella tua app usare questa classe appena creata in modo che la tua applicazione sia indipendente dal database.

Inoltre, la classe del tuo database dovrebbe implementare un'interfaccia generica per il database, in modo da poter potenzialmente sostituire l'implementazione, se necessario.

    
risposta data 22.10.2015 - 15:52
fonte
1

Il tuo modo di gestirlo è la soluzione comune (secondo me). Ma ci sono anche altri stili di design, ad es. il design guidato dal dominio. È il paradigma di base per lo sviluppo di estensioni typo3 e considerando il tuo problema potresti creare sth in questo modo:

  • Modello: queste sono le classi oggetto del modello
  • Controller: contiene i controller
  • Visualizza: fondamentalmente il tuo frontend / i tuoi punti di vista
  • Repository: contiene una classe che gestisce tutte le operazioni db, ad es. Database (è usato da un controller)
risposta data 22.10.2015 - 15:04
fonte
0

Per come la vedo io, la classe Database non dovrebbe sapere quale modello l'applicazione usa. Anche il modello non dovrebbe essere a conoscenza della classe Database. La classe che combina i due dovrebbe essere il Controller. Dovrebbe contenere un codice che indicherebbe alla classe Database di creare e modificare materiale, in base al Modello. Il modello dovrebbe contenere la logica aziendale (in questo caso cose come le convalide, ecc.)

    
risposta data 22.10.2015 - 13:40
fonte

Leggi altre domande sui tag