Quelles sont les stratégies POO pour travailler avec une base de données tout en gardant les éléments testables? Disons que j'ai une classe Utilisateur et que mon environnement de production fonctionne avec MySQL. Je vois quelques approches possibles, présentées ici en utilisant PHP:
Passez une $ data_source avec des interfaces pour
load()
etsave()
, pour résumer la source de données backend. Lors des tests, passez un autre magasin de données.$ user = nouvel utilisateur ($ mysql_data_source); $ user-> load ('bob'); $ user-> setNickname ('Robby'); $ user-> save ();
Utilisez une fabrique qui accède à la base de données et transmet la ligne de résultat au constructeur de l'utilisateur. Lors des tests, générez manuellement le paramètre $ row ou moquez l'objet dans UserFactory :: $ data_source. (Comment puis-je enregistrer les modifications apportées à l'enregistrement?)
class UserFactory { static $data_source; public static function fetch( $username ) { $row = self::$data_source->get( [params] ); $user = new User( $row ); return $user; } }
J'ai Design Patterns et Clean Code ici à côté de moi, mais j'ai du mal à trouver des concepts applicables.