2010-12-11 59 views
2

我在構建需要訪問數據庫的第三方庫。更具體地說,它是一個訪問控制庫。目前我面臨的最大問題是如何使它與大多數框架和CMS兼容?構建需要訪問數據庫的第三方PHP庫

我可以使用開發人員指定的數據庫實例發出查詢。這有三個問題:

  • 我需要訪問數據庫實例。
  • 該庫需要能夠處理不同的數據庫實例(PDO,MySQLi,mysql-resource,postgresql-resource等)
  • 不會有緩存,因爲查詢不通過應用程序假設應用程序使用一些)。

或者我可以只是有返回SQL的方法,但是更好嗎?

回答

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

根據需要添加其他適配器。

0

您可以在Zend_Db之類的現有數據庫抽象層之上構建,它可以讓您編寫一次代碼,並且它可以在任何地方工作。