数据库访问的最佳实践是什么?

tjjdgumg  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(371)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

两年前关门了。
改进这个问题
我的代码作为一个爱好,所以我没有一个关于这个主题的正式教育,所以请原谅我这个问题。关于这个问题我确实做了很多研究,但没有得到一个明确的答案。
在php中,我应该选择什么样的类结构来访问数据库?
类databaseobject和每个表的一个子类,以及一个类databaseobjectarray,它扩展了arrayobject并允许一次加载多个databaseobject(我需要能够使用foreach(或类似的)databaseobject对其进行迭代,databaseobject的函数有load()和store()。
类数据库和接口数据库对象,其中每个表与实现接口的一个类相关。数据库可以用于一次加载一个对象,也可以在一个数组中加载多个对象。
sql应该在哪里完成?
如果我选择选项一,我会在databaseobject和databaseobjectarray之间有一些重复的代码,那么使用扩展的pdo类会更好吗?
例如,我想要一个名为$conditions的数组以及一个addcondition($key,$value,$operator='=')函数,以便我可以首先定义条件,然后将()数据加载到对象中。(sql查询是基于$conditions进行组装的)我应该在databaseobject和databaseobjectarray中单独定义它们还是在pdo的扩展中定义它们?
或者我应该定义一个名为databaseaccess的特性,它可以在表类中使用,也可以在选项1的两个基类中使用。

g6baxovj

g6baxovj1#

延伸 PDO 从来都不是“最佳实践”。其实恰恰相反。特性只是一种代码味道,因为它们是由解释器驱动的复制粘贴。
最好的方法是分离业务逻辑和持久性逻辑。例如:您有一个执行用户逻辑的类和一个保存或填充此用户类示例的单独类。这种模式称为数据Map器。
基本上设置如下:

$user = new Entity\User($id);
$mapper = new Mapper\User($pdo);

$mapper->fetch($user);
if ($user->isBanned() && $user->hasExpiredBan(new DateTimeImmutable)) {
    $user->removeBan();
    $mapper->store($user);
}

在这种情况下,Map程序不扩展pdo,而是将其用作依赖项。至于如何与多个Map器共享同一个pdo示例,您可以查看这篇老文章。
对于如何实现Map器本身的简单示例,您可以查看以下示例。

相关问题