Quali sono alcune strategie OOP per lavorare con un database ma mantenere le cose testabili? Supponiamo che io abbia una classe User e che il mio ambiente di produzione funzioni con MySQL. Vedo un paio di possibili approcci, mostrati qui usando PHP:
Passa una $ data_source con interfacce per
load()
esave()
, per astrarre la fonte di dati back-end. Durante il test, passare un altro archivio dati.$ user = nuovo utente ($ mysql_data_source); $ user-> load ('bob'); $ user-> setNickname ('Robby'); $ User-> save ();
Utilizzare una factory che accede al database e passa la riga dei risultati al costruttore dell'utente. Durante il test, generare manualmente il parametro $ row o simulare l'oggetto in UserFactory :: $ data_source. (Come posso salvare le modifiche al record?)
class UserFactory { static $data_source; public static function fetch( $username ) { $row = self::$data_source->get( [params] ); $user = new User( $row ); return $user; } }
Ho modelli di progettazione e codice pulito qui accanto a me, ma faccio fatica a trovare concetti applicabili.