我应该预先填充对象的属性,还是对它的每个属性进行DB调用?


Should I pre-populate an object's attributes, or do a DB call for each of its attributes?

在PHP中,我看到了两种处理类实例的一般方法。

以系统中有用户为例。

方法1

$user_id = 5;
$u = new User($user_id); // fills in any and all info from the database
echo $u->getName();
echo $u->getEmail();

方法2

$user_id = 5;
echo Users::getName($user_id); // makes a call to the database
echo Users::getEmail($user_id); // makes a call to the database
在这种方法中隐含的是,我有一个类Users,它具有与用户相关的业务逻辑。它可以直接访问User类,该类可以通过调用MySQL执行CRUD操作。

方法3

$user = UserDao::findById($id);
$user->getName();

我喜欢这种方法,因为您应该将模型与创建模型的工厂分开。

如果您无论如何都要获取每个属性,那么执行查询来获取每个属性是非常昂贵的。所以在这种情况下,你的方法1或@Amir的更简洁的方法是更好的选择。这是一种权衡,在需要的情况下,通过一次数据库访问获得"所有东西",而不是在内存中存储大量可能不需要的东西。你的两种方法是一劳永逸或者在你需要的时候得到它们。

基本上有中间选项如果你还没有得到它,就得到它,总是使用"常用"的东西,当你需要的时候使用其他的东西。

或混合物总是得到这个,如果你还没有得到它们,然后是其他的位。

没有硬性规定。您必须查看对象上执行了哪些操作,以及它们的并发性如何。当会话2正在查看person1时,会话2可以更改person1的属性。

是否会导致错误、混淆或无关紧要?