Каковы некоторые ООП-стратегии для работы с базой данных, но для обеспечения единичного тестирования? Скажем, у меня есть класс User, и моя производственная среда работает против MySQL. Я вижу пару возможных подходов, показанных здесь с использованием PHP:
Передайте $ data_source с интерфейсами для
load()
иsave()
, чтобы абстрагировать внутренний источник данных. При тестировании передайте другое хранилище данных.$ user = new User ($ mysql_data_source); $ user-> load ('bob'); $ user-> setNickname ('Robby'); $ User-> Save ();
Используйте фабрику, которая обращается к базе данных и передает результирующую строку в конструктор пользователя. При тестировании вручную генерируйте параметр $ row или макетируйте объект в UserFactory :: $ data_source. (Как я могу сохранить изменения в записи?)
class UserFactory { static $data_source; public static function fetch( $username ) { $row = self::$data_source->get( [params] ); $user = new User( $row ); return $user; } }
У меня рядом есть Шаблоны проектирования и Чистый код , но я изо всех сил пытаюсь найти подходящие концепции.