Do czasu PHP5 ogromna część projektów komercyjnych porzuca MySQLi na rzecz PDO:MySQL. Ale nie o tym teraz rozważania...
MySQL pełni wyłącznie rolę menedżera połączenia (connector), a nie warstwy dostępu do danych (Data Access Layer). Typowym podejściem do tego tematu w dużych projektach jest wykorzystanie klas pośrednich, które obudowują konkretne funkcjonalności. Na ogół nie dziedziczą one z niczego, co oferuje menedżer połączenia, ale przechowują sobie do niego referencję (podaną często przy tworzeniu) i przez niego wywołują zapytania.
Przykład - hipotetyczna funkcjonalność:
Po naciśnięciu przycisku, jeśli nie zablokowano podstrony, wyświetl listę zdjęć, w przeciwnym razie, przekieruj do strony komunikatu
Pseudokod może wyglądać tak:
if (Baza->MenedzerStron->CzyZablokowano("galeria"))
{
return Baza->MenedzerObrazkow->PobierzObrazki();
}
else
{
Przekieruj();
}
Obiekty MenedzerStron oraz MenedzerObrazkow ukrywają funkcjonalność bazodanową pod spodem, dzięki czemu kod jest zorientowany problemowo. To z jednej strony ułatwia jego interpretację, z drugiej dzieli go na małe, niezależne bloki (klasy, metody, pakiety) o samodzielnej funkcjonalności.
Wielu programistów, których znam oddzielnie tworzy klasy warstwy dostępu do danych, a osobno obudowuje menedżer połączenia. W pierwszych implementuje zadania aplikacji, a w drugich funkcje upraszczające komunikację z bazą danych.