对象是否应该在设置属性(例如Blog Post对象)上保存到数据库

时间:2012-04-25 09:11:41

标签: php wordpress unit-testing

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

我问的原因是单元测试,我经常不想将DB用于这类事情,因为那不是我正在测试的。

我见过人们建议做类似

的事情
function __construct( PDO $db )

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

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

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

谢谢,希望这有道理!

2 个答案:

答案 0 :(得分:1)

简答:否。委托加载,保存到另一层。

答案 1 :(得分:0)

如果您希望获得任何性能,那么在对象上使用 - > save()函数最好在设置属性时保存。如果每次设置属性时写入数据库,那么具有7个属性的对象将向db写入7次,如果您有保存功能,则只有一次写入将用于所有7个属性。由于打开db连接是db的最慢功能,因此您希望最小化单独的读/写量。一般而言,打开与db的连接并写入一行大约需要打开连接和写入100000行。处理大型数据集时SQL速度很快,但打开连接并找到正确的读/写位置非常慢。

希望这会有所帮助: - )