Welche OOP-Strategien gibt es, um mit einer Datenbank zu arbeiten, aber die Einheit testbar zu halten? Angenommen, ich habe eine Benutzerklasse und meine Produktionsumgebung funktioniert gegen MySQL. Ich sehe ein paar mögliche Ansätze, die hier mit PHP gezeigt werden:
Übergeben Sie eine $ data_source mit Schnittstellen für
load()
undsave()
, um die Backend-Datenquelle zu abstrahieren. Übergeben Sie beim Testen einen anderen Datenspeicher.$ user = neuer Benutzer ($ mysql_data_source); $ user-> load ('bob'); $ user-> setNickname ('Robby'); $ user-> save ();
Verwenden Sie eine Factory, die auf die Datenbank zugreift und die Ergebniszeile an den Konstruktor des Benutzers übergibt. Generieren Sie beim Testen den Parameter $ row manuell oder verspotten Sie das Objekt in UserFactory :: $ data_source. (Wie kann ich Änderungen am Datensatz speichern?)
class UserFactory { static $data_source; public static function fetch( $username ) { $row = self::$data_source->get( [params] ); $user = new User( $row ); return $user; } }
Ich habe hier neben mir Design Patterns und Clean Code , aber ich habe Mühe, geeignete Konzepte zu finden.