2016-01-05 11 views
5

così ho visto ususally un modello è la rappresentazione di una tabella nel database, come per la tabella degli utenti va qualcosa come:Utilizzando un unico modello CRUD per tutti i controller, invece di modelli separati per ogni controller

class user_model { 

    public $id ; 
    public $username ; 
    public $password ; 
    public $email ; 


    public function save(){ 
    $db->query(" insert into `users` (username , email , password) values ('$this->username' , '$this->email' , '$this->password') "); 
    } 

    public function delete(){ 
    $db->query(" delete from users where id = $this->id "); 
    } 

} 

ma questo proccess è piuttosto lento e ciò che la maggior parte dei modelli non è il funzionamento di base CRUD ... quindi io uso un unico modello CRUD per quasi tutti i miei controller come:

class crud_model { 

    public function save($tbl , $data){ 
    $db->query(" insert into $tbl (".explode(',' , array_keys($data)).") values (".explode(',' , $data).") "); 
    } 

    public function delete( $tbl , $data){ 
    $db->query(" delete from $tbl where $data['column'] = $data['val'] "); 
    } 

} 

suppliche notare che questa è una versione molto semplificata di il mio modello e fondamentalmente non è niente come il codice originale (im utilizzando record attivo nel codice originale e può gestire scenari complessi) quindi ignorare sintassi ed errori tecnici

quindi voglio sapere se c'è un problema con questo approccio? mi sto perdendo qualcosa ?

che cosa è il punto di avere un sacco di modelli, quando si può ottenere con un unico modello CRUD .... Sembra proprio come eri di tempo

+0

Nonostante il fatto che si debbano utilizzare istruzioni preparate per ottenere un vantaggio in termini di sicurezza, non c'è nulla di sbagliato nel codice. –

+0

@HenriqueBarcelos in realtà sto usando il record attivo per la query, volevo solo mantenere il codice il più semplice possibile – max

+2

Invece di usare una singola classe, potresti ereditare una classe base comune per scrivere 'save' e' delete' metodi solo una volta. – user3409662

risposta

2

Il tuo approccio non è necessariamente sbagliato . Come programmatori, ci piace che le cose siano coerenti in modo che quando devi apportare modifiche al tuo codice non devi preoccuparti di un modello di tabella che funziona in modo diverso da un altro modello di tabella. Siamo anche pigri (in senso buono), quindi vuoi essere in grado di scrivere una volta la tua classe CRUD e usarla ovunque. Hai questa parte in basso con la tua idea di classe unica.

Tuttavia, se si prende la classe CRUD e si ereditano tutti i modelli di tabella, si ottengono i vantaggi di aver scritto il codice una volta, inoltre se è necessario fare qualcosa con una tabella che non rientra nella base Codice CRUD puoi facilmente eseguire l'override o aggiungere alla funzionalità nella classe della tabella figlio.

In termini di modello di un modello per rappresentare le tabelle, con l'approccio corrente, non è possibile rappresentare singole tabelle con una classe CRUD generica. Le classi modello avranno spesso proprietà di classe aggiuntive specifiche per la tabella che viene rappresentata. Questo ti permette di progettare le tue classi in modo che se dovessero essere riutilizzate, lo sviluppatore ha una migliore comprensione della struttura dei dati sottostanti. Guarda il tuo esempio della classe User nella tua domanda originale. Quella classe ha proprietà come $id, $username e $password. Uno sviluppatore può guardarlo e sapere esattamente cosa è necessario per creare un nuovo utente.