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

时间:2010-12-11 16:24:41

标签: php database oop

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

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

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

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

2 个答案:

答案 0 :(得分:1)

Adapter Design Pattern让人想起

  

“现成”组件提供了您想要重用的引人注目的功能,但其“世界观”与当前正在开发的系统的理念和架构不兼容。

对于您的具体问题,这意味着您为框架创建了一个类,该类使用其他类所需的所有方法公开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();
    }
}

以上是您的主要课程。您只能从剩余的框架代码中与此类进行交互。然后,与特定数据库交互所需的功能包含在具体的适配器中。您在运行时实例化并注入适配器。

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
    }
}

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

答案 1 :(得分:0)

你可以构建在Zend_Db之类的现有数据库抽象层之上,它可以让你编写一次代码,它可以在任何地方工作。

相关问题