1

我开始接触更多的 OO PHP 并为这些对象编写测试。我的主要问题是:如果我有一个Blog_Post对象,并且我调用了$post->setCategory( 'Foo' ),是否应该直接保存到数据库中?

我问的原因是为了进行单元测试,我经常不想将数据库用于这类事情,因为那不是我要测试的。

我看到人们建议做类似的事情

function __construct( PDO $db )

传入要使用的数据库对象,然后在测试时使用mock。但是,我真的不喜欢总是通过调用 Blog_Post 类来实例化我的数据库对象的想法。

这是 WordPress 的范围,它从根本上没有 OO 方法 - 对于我当前的 Blog_Post,setter 方法只会调用数据库(通过全局 $wpdb !!(我知道!))。

真的我想知道,像这样的东西阻力最小的路径的一般模式是什么。Blog_Post 会只写它自己,还是可能会使用“save()”方法将所有设置的属性实际推送到数据库?或者在调用 setter 之前在对象“setSaveToDB(false)”上设置一个标志。

谢谢,希望这有点道理!

4

2 回答 2

1

简短回答:不。委托加载,保存到另一层。

于 2012-04-25T18:33:31.440 回答
0

如果您希望获得任何类型的性能,那么在对象上使用 ->save() 函数比在设置属性时保存更可取。如果每次设置属性时都写入数据库,则具有 7 个属性的对象将向数据库写入 7 次,如果您有保存功能,则所有 7 个属性仅使用一次写入。由于打开数据库连接是数据库中最慢的功能,因此您需要尽量减少单独的读/写次数。一般而言,打开与数据库的连接并写入一行与打开连接并写入 100000 行所花费的时间大致相同。SQL 在处理大型数据集时速度很快,但打开连接并找到正确的读/写位置非常慢。

希望这可以帮助 :-)

于 2012-04-25T09:20:21.747 回答