gpt4 book ai didi

php - 构建需要数据库访问的第三方 PHP 库

转载 作者:搜寻专家 更新时间:2023-10-30 20:45:12 24 4
gpt4 key购买 nike

我正在构建一个需要数据库访问的第 3 方库。更具体地说,它是一个访问控制库。目前我面临的最大问题是如何使其与大多数框架和 CMS 兼容?

我可以使用开发人员指定的数据库实例发出查询。这存在三个问题:

  • 我需要访问数据库实例。
  • 库需要能够处理不同的数据库实例(PDO、MySQLi、mysql-resource、postgresql-resource 等)
  • 不会有缓存,因为查询不会通过应用程序(假设应用程序使用了一些缓存)。

或者我可以只使用返回 SQL 的方法,但那样更好吗?

最佳答案

Adapter Design Pattern浮现在脑海中

An “off the shelf” component offers compelling functionality that you would like to reuse, but its “view of the world” is not compatible with the philosophy and architecture of the system currently being developed.

对于您的具体问题,这意味着您为您的框架创建一个类,该类公开一个 API 以及您的其他类所需的所有方法。这是您将与之交互的唯一界面。然后为每个要支持的数据库创建适配器。因此,您的适配器将成为您的框架和 DAL 之间的调停者。​​

例子:

interface DB_Interface
{
public function somethingYourFrameworkUses();
}

class YourDB implements DB_Interface
{
public function setAdapter(DB_Interface $adapter)
{
$this->adapter = $adapter;
}
public function somethingYourFrameworkUses()
{
$this->adapter->somethingYourFrameworkUses();
}
}

上面是你的主类。您只能从剩余的框架代码中与此类进行交互。与特定数据库交互所需的功能包含在具体的适配器中。您在运行时实例化并注入(inject)一个适配器。

class PDO_Adapter implements DBInterface
{
public function somethingYourFrameworkUses()
{
// code to make this function work with PDO
}
}

class MySQLi_Adapter implements DBInterface
{
public function somethingYourFrameworkUses()
{
// code to make this function work with MySQLiAdapter
}
}

根据需要添加其他适配器。

关于php - 构建需要数据库访问的第三方 PHP 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4417638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com