[英]PHP using multiple MySQL database connections
我正在創建一個在不同服務器上使用3個不同數據庫的應用程序。 獲取數據發生在我的Data mappers中,每個都擴展了一個抽象的DataMapper父類:
abstract class DataMapper {
protected $db;
protected $db2;
protected $db3;
function __construct() {
$this->db = new Database('db1');
$this->db2 = new Database('db2');
$this->db3 = new Database('db3');
}
}
但是,對於只需要這3個連接中的一個的頁面來說,這會有點過分。 為應用程序的每個部分返回正確的數據庫連接的最佳方法是什么? 我聽說過應用程序注冊表,但我不知道如何設置這樣的東西。
我不喜歡你如何設置你的數據映射器。 您正在為每個映射器創建新連接,即使它使用已建立連接的提供程序也是如此。 換句話說,每個數據映射器都會創建一個新的數據庫對象。
理想情況下,應保存這些數據庫對象並將其傳遞給需要它們的數據映射器。 自動注射通常效果很好。 這意味着您不必使用new
關鍵字實例化對象,而是通過對象的構造參數請求它們。
例如:
class Example1Mapper extends DataMapper {
function __construct( Provider1 $provider1 ) { ... }
}
class Example2Mapper extends DataMapper {
function __construct( Provider1 $provider1, Provider2 $provider2 ) { ... }
}
上面,兩個映射器類需要不同的提供者。 您需要做的唯一事情是通過對象的構造函數指定它。 其余的是自動依賴注入/自動裝配。
我不知道你的架構是如何建立的,但這就是我所做的:路由器和注入器協同工作。 路由器確定應該調用哪個控制器以及應該調用什么操作(方法)。 進樣器獲取此信息並反映控制器的參數。 它還反映了參數的參數,等等......注入器創建所有對象並決定要傳遞的數據庫提供程序,域對象等。 這里和這里將是開始學習注射器的好地方,但你可能想要做一些閱讀。 還有一些很好的輕量級DIC。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.