Php 我是否应该预填充对象';s属性,或对其每个属性进行DB调用?
我看到了在PHP中处理类实例的两种通用方法 例如,我们在系统中有用户 方法1 方法2Php 我是否应该预填充对象';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();
这种方法意味着我有一个类
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();