2016-01-05 6 views
5

więc Widziałem ususally model jest przedstawienie tabeli w bazie danych jak dla tabeli użytkowników idzie coś takiego:Korzystanie pojedynczy model CRUD dla wszystkich kontrolerów zamiast odrębnych modeli dla każdego kontrolera

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

} 

ale to proccess jest dość powolny i co większość modeli zrobić, to podstawowe operacje CRUD ... więc używać jednego modelu CRUD dla prawie wszystkich moich kontrolerów takich jak:

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

} 

zarzutów pamiętać, że jest to bardzo uproszczona wersja mój model i zasadniczo nic takiego jak oryginalny kod (im przy użyciu aktywnego rekordu w oryginalnym kodzie i może obsługiwać złożone scenariusze), więc ignoruj ​​składnię i błędy techniczne

, więc chcę wiedzieć, czy jest jakiś problem z tym podejściem? czy czegoś brakuje?

co jest punkt o wiele modeli, kiedy można dostać się z jednego modelu CRUD .... to po prostu wydaje się Wast czasu

+0

Pomimo faktu, że powinieneś używać przygotowanych instrukcji w celu uzyskania korzyści bezpieczeństwa, nie ma nic złego w tym kodzie. –

+0

@HenriqueBarcelos faktycznie im przy użyciu aktywnego rekordu dla kwerendy, po prostu chciałem zachować kod tak proste, jak to możliwe – max

+2

Zamiast korzystania z jednej klasy, można dziedziczyć wspólną klasę bazową, aby zapisać 'zapisz' i' usunąć' metody tylko raz. – user3409662

Odpowiedz

2

Twoje podejście niekoniecznie źle. Jako programiści lubimy rzeczy, które mają być spójne, więc gdy trzeba dokonać modyfikacji kodu, nie trzeba się martwić o jeden model tabeli działający inaczej niż inny model tabeli. Jesteśmy również leniwi (w dobrym tego słowa znaczeniu), aby móc raz napisać swoją klasę CRUD i używać jej wszędzie. Zwalczyłeś tę część ze swoim pomysłem na jedną klasę.

Jeśli jednak weźmiesz swoją klasę CRUD, a następnie wszystkie modele tabel będą z niej dziedziczyć, uzyskasz korzyści z zapisania kodu raz, a także jeśli potrzebujesz zrobić coś ze stołem, który nie mieści się w twojej bazie Kod CRUD można łatwo przesłonić lub dodać do funkcji w klasie tabeli podrzędnej.

Pod względem modelu posiadania modelu reprezentującego tabele, przy obecnym podejściu, nie można prawdziwie reprezentować poszczególnych tabel z ogólną klasą CRUD. Klasy modeli często mają dodatkowe właściwości klasy, które są specyficzne dla reprezentowanej tabeli. Dzięki temu możesz zaprojektować swoje klasy, aby umożliwić ponowne wykorzystanie dewelopera, dzięki czemu lepiej zrozumiesz podstawową strukturę danych. Sprawdź swój przykład klasy User w oryginalnym pytaniu. Ta klasa ma właściwości, takie jak $id, $username i $password. Programista może na to spojrzeć i dokładnie wiedzieć, co jest potrzebne do utworzenia nowego użytkownika.

Powiązane problemy