我在構建需要訪問數據庫的第三方庫。更具體地說,它是一個訪問控制庫。目前我面臨的最大問題是如何使它與大多數框架和CMS兼容?構建需要訪問數據庫的第三方PHP庫
我可以使用開發人員指定的數據庫實例發出查詢。這有三個問題:
- 我需要訪問數據庫實例。
- 該庫需要能夠處理不同的數據庫實例(PDO,MySQLi,mysql-resource,postgresql-resource等)
- 不會有緩存,因爲查詢不通過應用程序假設應用程序使用一些)。
或者我可以只是有返回SQL的方法,但是更好嗎?
我在構建需要訪問數據庫的第三方庫。更具體地說,它是一個訪問控制庫。目前我面臨的最大問題是如何使它與大多數框架和CMS兼容?構建需要訪問數據庫的第三方PHP庫
我可以使用開發人員指定的數據庫實例發出查詢。這有三個問題:
或者我可以只是有返回SQL的方法,但是更好嗎?
一個「現成的」組件提供了令人信服的功能,你想重用,但其「對世界的看法」不符合的理念和架構兼容系統目前正在開發中。
對於你的具體問題,這意味着你爲你的框架創建一個類,暴露一個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
}
}
根據需要添加其他適配器。
您可以在Zend_Db之類的現有數據庫抽象層之上構建,它可以讓您編寫一次代碼,並且它可以在任何地方工作。