Skocz do zawartości

OOP -> update, insert i delete


PawelC

Rekomendowane odpowiedzi

Hej piszę sobie klasę do obsługi bazy danych, i używam do tego mysqli, wszystko ładnie pięknie działa, dzięki jednej metodzie pobiera się różne dane, z różnych tabel. I doszedłem do etapu insert, update i delete, moje pytanie brzmi czy dla tych 3 poleceń, stworzyć 3 osobne metody, czy jest jakieś lepsze rozwiązanie?

Do wykonania zapytania używam takiego kodu:

$result=$this->mysqli->query($this->query=$query);

Czyli zrobiłbym 3 metody, tyle że inny komunikat po wykonaniu.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak już Piszesz klasę do obsługi bazy proponuję zaimplementować w niej metody, lub właściwości publiczne zwracającą liczbę wykonywanych zapytań oraz tablicę samych zapytań:

private $ileZapytan;
private $jakieZapytania;

public function __construct()
{
$this->ileZapytan = 0;
$this->jakieZapytania = array();
}

public function MyQuery($sql)
{
//jakiś kod realizujacy zapytanie do bazy
$this->jakieZapytania[] = $sql; // dodajesz kod zapytania sql
$this->ileZapytan++; // incrementujesz licznik
}

public function getJakieZapytania()
{
return $this->jakieZapytania;
}

public function getIleZapytan()
{
return $this->ileZapytan;
}

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Tak, ale sama klasa która obsługuje zapytania do bazy musi realizować operacje o jakich pisałem bo jest to dla nich odpowiednie miejsce.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Właśnie że nie.

> klasa która obsługuje zapytania do bazy

Ma tylko i wyłącznie obsługiwać zapytania do bazy, je wykonywać. Być pomostem pomiędzy php a serwerem bazodanowym.

Zliczanie, zapisywanie wykonanych zapytań, obliczanie czasu ich wykonywania powinno być wykonywane przez inną klasę ładowaną jako obserwator.

public function query($sql)
{
 foreach($this->obserwatorzy as $obs) {
$obs->informuj($this);
 }
 $this->pdo->query($sql);
 foreach($this->obserwatorzy as $obs) {
$obs->informuj($this);
 }
}

stopka usunieta z wpoodu wirusa na stronie docelowej

Odnośnik do komentarza
Udostępnij na innych stronach

W ten sposób dodałeś dwie pętle tam gdzie jest to zupełnie niepotrzebne...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Równie dobrze możemy powiedzieć że tworzymy klasę do obsługi gdzie jest ona zupełnie niepotrzebna bo są funkcje mysql_* a wszystko można zrobić funkcjami.

OOP polega właśnie na tym by każda klasa miała swoje konkretnie działania, a nie mieszenia wszystkiego co się da do jednej klasy.

W Twoim wypadku by rozwinąć klasę o kolejne metody trzeba ją modyfikować(co może spowodować wysypanie się aplikacji w innych miejscach) u mnie wystarczy:

$db->dodajObserwatora(new Monitoruj_Drop_Table);

i mam kolejną funkcjonalność bez naruszania struktury klasy bazowe.

stopka usunieta z wpoodu wirusa na stronie docelowej

Odnośnik do komentarza
Udostępnij na innych stronach

Do tego koniecznie klasy abstrakcyjne lub interfejsy, bo w końcu musimy też dziedziczyć, by być w pełni obiektowi i mieć "zaawansowany" kod PHP :D

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Kiedyś pisałem w klasie do obsługi bazy danych, logger który zapisywał zapytanie oraz czas wykonania, tego zapytania. To rozumiem że taki logger. ma być w osobnej klasie?

Niema to być jakaś super wypas klasa, ważne żeby obsłużyła dobrze bazę danych w tym select, insert, update i delete :D Co nie zmienia faktu że prędzej czy później ją bardziej rozbuduje.

Wtedy to było coś takiego:

//includowanie klasy bazy danych

// wykonanie zapytania

// wywołanie loggera (zapis zapytania i czasu wykonania do pliku)

Odnośnik do komentarza
Udostępnij na innych stronach

czyli muszę napisać logger w osobnej klasie.
Nic nie musisz. Chodzi o pisanie kodu którego się rozumie, a nie pisanie niezrozumiałego kodu tylko dla tego żeby na siłę stosować jakieś wzorce projektowe które często są tylko samą sztuką dla sztuki...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

no to już wiem na czym teraz stoję :D Zresztą zawszę, mogę napisać zrozumiały dla siebie kod, a z czasem jak się bardziej poduczę OOP, napisać to w bardziej ogólny sposób, i zrozumiały nie tylko dla mnie. Choć wszystkie klasy etc.. piszę na własne potrzeby. Ze wzorców projektowych to wiem, jak na razie jak używać singleton :) W książce jest ich dużo opisane, nawet MVC za który niema co się brać bez podstaw OOP.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności