Jakie są niektóre strategie OOP do pracy z bazą danych, ale testowania jednostki? Załóżmy, że mam klasę użytkownika, a moje środowisko produkcyjne działa przeciwko MySQL. Widzę kilka możliwych podejść, pokazanych tutaj za pomocą PHP:
Przekaż źródło danych $ z interfejsami dla
load()
isave()
, aby wyodrębnić źródło danych zaplecza. Podczas testowania przekaż inny magazyn danych.$ user = nowy użytkownik ($ mysql_data_source); $ user-> load ('bob'); $ user-> setNickname („Robby”); $ user-> save ();
Użyj fabryki, która uzyskuje dostęp do bazy danych i przekazuje wiersz wynikowy do konstruktora użytkownika. Podczas testowania ręcznie wygeneruj parametr $ row lub wyśmiewaj się z obiektu w UserFactory :: $ data_source. (Jak mogę zapisać zmiany w rekordzie?)
class UserFactory { static $data_source; public static function fetch( $username ) { $row = self::$data_source->get( [params] ); $user = new User( $row ); return $user; } }
Mam obok siebie Wzory Projektowe i Czysty Kod , ale staram się znaleźć odpowiednie koncepcje.