2016-01-05 6 views
5

so habe ich ist ususally ein Modell gesehen Darstellung einer Tabelle in der Datenbank wie für Benutzer-Tabelle geht es so etwas wie:ein einziges crud Modell für alle Steuerungen statt separater Modelle für jeden Controller Mit

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 "); 
    } 

} 

aber diese proccess ist ziemlich langsam und die meisten Modelle, was zu tun ist einfach CRUD Betrieb ... so verwende ich ein einziges crud Modell für fast alle meine Controller wie:

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'] "); 
    } 

} 

Bitten beachten Sie, dies ist eine sehr vereinfachte Version mein Modell und im Grunde ist es nichts wie die Originalcode (verwende aktiven Datensatz im Originalcode und kann komplexe Szenarios verarbeiten), also ignoriere Syntax und technische Fehler

Also möchte ich wissen, ob es ein Problem mit diesem Ansatz gibt? vermisse ich etwas?

was ist der Punkt von vielen Modellen, die, wenn Sie von einem CRUD Modell bekommen kann .... es scheint nur, wie wast Zeit

+0

Trotz der Tatsache, dass Sie vorbereitete Anweisungen verwenden sollten, um einen Sicherheitsgewinn zu erzielen, ist Ihr Code nicht falsch. –

+0

@HenriqueBarcelos eigentlich benutze aktiven Datensatz für die Abfrage, ich wollte nur den Code so einfach wie möglich halten – max

+2

Anstatt eine einzige Klasse zu verwenden, könnten Sie eine gemeinsame Basisklasse erben, um die 'save' und' delete' zu ​​schreiben Methoden nur einmal. – user3409662

Antwort

2

Ihr Ansatz nicht unbedingt falsch ist. Als Programmierer mögen wir es, dass die Dinge konsistent sind, so dass Sie sich keine Sorgen machen müssen, dass ein Tabellenmodell anders als ein anderes Tabellenmodell funktioniert, wenn Sie Änderungen an Ihrem Code vornehmen müssen. Wir sind auch faul (auf eine gute Art), so dass Sie Ihre CRUD-Klasse einmal schreiben und überall verwenden können. Du hast diesen Teil mit deiner Ein-Klassen-Idee verloren.

Wenn Sie jedoch Ihre CRUD-Klasse verwenden und dann alle Ihre Tabellenmodelle davon erben, haben Sie die Vorteile, dass Sie den Code einmal geschrieben haben und wenn Sie etwas mit einer Tabelle außerhalb Ihrer Basis tun müssen CRUD-Code, den Sie leicht überschreiben oder der Funktionalität in Ihrer Kindtabellenklasse hinzufügen können.

In Bezug auf die Muster mit einem Modell zur Darstellung Ihrer Tabellen, mit Ihrem aktuellen Ansatz können Sie nicht wirklich einzelne Tabellen mit einer generischen CRUD-Klasse darstellen. Modellklassen haben oft zusätzliche Klasseneigenschaften, die für die dargestellte Tabelle spezifisch sind. Auf diese Weise können Sie Ihre Klassen so gestalten, dass der Entwickler bei der Wiederverwendung die zugrundeliegende Datenstruktur besser versteht. Schau dir dein Beispiel der User Klasse in deiner ursprünglichen Frage an. Diese Klasse hat Eigenschaften wie $id, $username und $password. Ein Entwickler kann sich das ansehen und genau wissen, was benötigt wird, um einen neuen Benutzer zu erstellen.