Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
5年前关闭。
我正在使用登录系统。我正在尝试避免重复的代码,并且尽我所能将职责分开。
假设我有一个
再往下走,我到达了一个需要比较用户输入的凭证和数据库中凭证的位置。
总的来说,我可以将其抽象到某个点,在某些点上我需要实际的唯一查询。
例如,对于登录功能,我需要一个查询,例如:
为了注册用户,我需要一个查询,例如:
等等等等。
这是我的问题/疑虑,无论您想称呼什么。
通常,我会建立一个只执行某件事和某事的类。而且我真的不想将查询与逻辑混在一起(可以这么说)。
编写一个专门处理查询的类(或者我不知道的其他东西,例如接口)是否是一个好主意。还是可以将查询与逻辑混合在一起?
我真的希望我能以一种可以理解的方式向自己解释。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
5年前关闭。
我正在使用登录系统。我正在尝试避免重复的代码,并且尽我所能将职责分开。
假设我有一个
Authentication
类,它执行以下操作:class Authentication
{
public function login($username, $password);
public function logout();
}
再往下走,我到达了一个需要比较用户输入的凭证和数据库中凭证的位置。
总的来说,我可以将其抽象到某个点,在某些点上我需要实际的唯一查询。
例如,对于登录功能,我需要一个查询,例如:
$dbPDO->prepare("SELECT $loginUsername, FROM $tableName WHERE $loginUsername=:username");
为了注册用户,我需要一个查询,例如:
$dbPDO->prepare("INSERT INTO $tableName($loginUsername, $loginPassword, $loginEmail) VALUES (:username, :password, :email)");
等等等等。
这是我的问题/疑虑,无论您想称呼什么。
通常,我会建立一个只执行某件事和某事的类。而且我真的不想将查询与逻辑混在一起(可以这么说)。
编写一个专门处理查询的类(或者我不知道的其他东西,例如接口)是否是一个好主意。还是可以将查询与逻辑混合在一起?
我真的希望我能以一种可以理解的方式向自己解释。
最佳答案
一个很常见的解决方案是存储库模式。基本上,您的想法是尽可能地对待实体,就像从未将它们写入磁盘,而是始终将其保留在内存中一样。
您的存储库有多种不同的方法可根据条件(当大多数框架说模型表示实体时,即表示实体)对实体进行水化处理。然后,您的存储库实现了用于查询数据库并在存储库返回的对象上设置必要属性的所有逻辑。它还应水合相关物品。许多ORM为您执行此操作(水合)。例如hibernate(Java)和doctrine2(php)。
基本上,最好的选择是采用从续集查询到对象的所有逻辑,并将其放入存储库类中,或者使用orm为您执行此操作。
在您的情况下,您的身份验证类应具有用户存储库,使用给定的ID来获取用户,然后他们将检索到的用户密码与输入的密码进行比较。
关于php - 我如何从逻辑中分离出对数据库的查询-基本上分离责任,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25613279/