我正在构建一个需要数据库访问的第三方库。更具体地说,它是一个访问控制库。目前我面临的最大问题是如何使其与大多数框架和CMS兼容?
我可以使用开发人员指定的数据库实例发出查询。这有三个问题:
或者我可以使用返回SQL的方法,但是更好吗?
答案 0 :(得分:1)
“现成”组件提供了您想要重用的引人注目的功能,但其“世界观”与当前正在开发的系统的理念和架构不兼容。
对于您的具体问题,这意味着您为框架创建了一个类,该类使用其他类所需的所有方法公开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之类的现有数据库抽象层之上,它可以让你编写一次代码,它可以在任何地方工作。