使用数据库但保持单元可测试性的一些OOP策略是什么?假设我有一个User类,并且我的生产环境适用于MySQL。我看到了两种可能的方法,如下所示使用PHP:
通过在与接口$ DATA_SOURCE
load()
和save()
,抽象数据的后端源。测试时,请传递其他数据存储。$ 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; } }
我旁边有设计模式和简洁代码,但我一直在努力寻找适用的概念。