Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我是否应该预填充对象';s属性,或对其每个属性进行DB调用?_Php_Design Patterns - Fatal编程技术网

Php 我是否应该预填充对象';s属性,或对其每个属性进行DB调用?

Php 我是否应该预填充对象';s属性,或对其每个属性进行DB调用?,php,design-patterns,Php,Design Patterns,我看到了在PHP中处理类实例的两种通用方法 例如,我们在系统中有用户 方法1 方法2 这种方法意味着我有一个类Users,它具有与用户相关的业务逻辑。它可以直接访问用户类,该类可以通过调用MySQL执行CRUD操作。方法3 $user = UserDao::findById($id); $user->getName(); 我喜欢这种方法,因为您应该将模型与创建模型的工厂分开 方法3 $user = UserDao::findById($id); $user->getName();

我看到了在PHP中处理类实例的两种通用方法

例如,我们在系统中有用户

方法1 方法2
这种方法意味着我有一个类
Users
,它具有与用户相关的业务逻辑。它可以直接访问
用户
类,该类可以通过调用MySQL执行CRUD操作。

方法3

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

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

方法3

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

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

如果您无论如何都要获取每个属性,那么执行查询来获取每个属性是非常昂贵的。因此,在这种情况下,您的方法1或@Amir的更简洁的方法将是更好的选择。 这是一个折衷方案,用一个db访问获取“一切”,以备需要,而不是在内存中存储大量可能不需要的内容。 您的两种方法是同时获取所有内容 或者按你的需要买每一个

基本上有两种选择 如果你还没拿到的话就去拿, 在你需要的时候,随时获取“普通”的东西和其他一些东西

或者一种混合物总是得到这个,如果你还没有得到的话,还有其他的


没有硬性规定。您必须查看在对象上执行的操作,以及这些操作的并发程度。ie可以在session1查看时更改person1的属性。这是否会导致错误、混乱或无关紧要。

如果要获取每个属性,执行查询以获取每个属性是非常昂贵的。因此,在这种情况下,您的方法1或@Amir的更简洁的方法将是更好的选择。 这是一个折衷方案,用一个db访问获取“一切”,以备需要,而不是在内存中存储大量可能不需要的内容。 您的两种方法是同时获取所有内容 或者按你的需要买每一个

基本上有两种选择 如果你还没拿到的话就去拿, 在你需要的时候,随时获取“普通”的东西和其他一些东西

或者一种混合物总是得到这个,如果你还没有得到的话,还有其他的


没有硬性规定。您必须查看在对象上执行的操作,以及这些操作的并发程度。ie可以在session1查看时更改person1的属性。这会导致错误、混淆还是无关紧要。

Ok,对于插入用户,我会执行
Users::insert($name)
,然后调用
user::insert($name)
。在您的数据访问对象+工厂方法中,这将如何工作?@eoinoc$user->save()或UserDao::save($user)或$UserDao->save($user)我希望我可以继续澄清:)对于业务逻辑,例如
isUserExpired()
我目前将其放在
Users::isUserExpired($user\id)
中。在您的方法中,它可能是
$userDao->isUserExpired($user)
?我认为这意味着
$userDao
将负责业务逻辑。$user->isExpired()是我的建议。因为你在不止一个地方需要这种逻辑@dqhendricks说的是正确的想法。@eoinoc dao会给您提供模型,然后在模型上运行操作,然后doa将在必要时保存模型。如果您运行的是activerecord模式,则模型可以保存自身。好的,对于插入用户,我将执行
Users::insert($name)
,这将依次调用
user::insert($name)
。在您的数据访问对象+工厂方法中,这将如何工作?@eoinoc$user->save()或UserDao::save($user)或$UserDao->save($user)我希望我可以继续澄清:)对于业务逻辑,例如
isUserExpired()
我目前将其放在
Users::isUserExpired($user\id)
中。在您的方法中,它可能是
$userDao->isUserExpired($user)
?我认为这意味着
$userDao
将负责业务逻辑。$user->isExpired()是我的建议。因为你在不止一个地方需要这种逻辑@dqhendricks说的正是他所想的。@eoinoc dao会给你模型,然后你会在模型上运行操作,然后doa会在必要时保存模型。如果您运行的是activerecord模式,模型可以保存自身。您能想出第一个选项不更好的单一原因吗?您能想出第一个选项不更好的单一原因吗?谢谢。我曾经“有时什么都能得到”。问题是,我永远记不住或无法正确跟踪已设置的内容。这就是我后来决定使用
方法2
的原因,这是一种可靠的方法,在我需要数据时总是请求数据。谢谢。我曾经“有时什么都能得到”。问题是,我永远记不住或无法正确跟踪已设置的内容。这就是我后来决定使用
方法2
的原因,它是在我需要数据时始终请求数据的可靠方法。
$user = UserDao::findById($id);
$user->getName();