Как создать несколько соединений DB с использованием шаблона Singleton? Или, может быть, есть лучший подход, чтобы разделить один класс, но несколько соединений?Несколько типов соединений DB
ответ
Как использовать шаблон Factory для возврата одного и того же экземпляра для каждого соединения, например.
ConnectionFactory::getInstance(ConnectionFactory::DEVELOPMENT);
Возвращает Connection
экземпляр для подключения к базе данных развития.
Мгновенное действие Connection
должно выполняться только ConnectionFactory
, которое может содержать ссылки на эти экземпляры в статическом массиве с ключом по типу подключения. Это позволяет избежать одноэлементного шаблона, но гарантирует, что вы поддерживаете только один экземпляр каждого Connection
.
Пул соединений.
В случае Явы:
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/Code/JDCConnectionPool.java
Этот пример лишний раз показывает, как вы можете реализовать его в еще лучше.
Как насчет отмены шаблона Singleton, если вы хотите несколько? В последнее время Singleton стал анти-шаблоном, поэтому вы, вероятно, должны отказаться от него, даже если вам нужно одно соединение. Не говоря уже о том, что распространение Singleton на PHP довольно сложно на данный момент.
Как уже говорили другие, падение одиночки, то я бы, вероятно, сделать что-то вроде этого:
interface Connection_Interface
{
public function connect();
public function disconnect();
public function exec($sql);
// etc...
}
class Connection implements Connection_Interface
{
public function __construct($host, $username, $password, $database);
public function connect();
public function disconnect();
public function exec($sql);
// etc...
}
Затем еще один класс, который имеет несколько соединений:
class Connection_Multiple implements Connection_Interface
{
protected $_connections = array();
public function __construct();
public function add(Connection $connection);
public function connect();
public function disconnect();
public function exec($sql)
{
// decide here which connection you want to use, then...
return $connection->exec($sql);
}
// etc...
}
Поскольку и одно соединение и несколько классов соединений реализуют один и тот же интерфейс, который вы можете использовать точно так же.
Это композитный рисунок. :) –
Я пришел к этому решению:
class Database {
private static $instances = array();
public static function getInstance($connection='default') {
if (!array_key_exists($connection,self::$instances)) {
self::$instances[$connection] = new Database($connection);
}
return self::$instances[$connection];
}
private function __construct($connection) {
$this->credentials = // getting credentials from config by $connection...
$this->connect(); // connect using credentials
}
}
$DB1 = Database::getInstance('development');
$DB2 = Database::getInstance('production');
Похоже, работает для меня. Является ли это шаблоном Singleton или чем-то смешанным?
Нет: singleton обеспечивает только один экземпляр класса, доступ к которому возможен глобально. Ваш дизайн ограничивает экземпляры класса, но это не всегда один и тот же экземпляр. Надеюсь, разница разная. –
- 1. YII2 Ajax Несколько соединений DB
- 2. Php, MySql - Несколько соединений DB и mysql_insert_id()
- 3. Несколько DB-соединений в Tomcat context.xml?
- 4. Несколько соединений Oracle DB с OracleDataSource
- 5. Настроить несколько соединений DB на ZF2
- 6. Db производительности: несколько соединений против присоединяется/подзапросы
- 7. Несколько соединений с DB и структура исполнителей
- 8. Azure SQL - одно или несколько соединений DB?
- 9. несколько соединений mysql db на zencart
- 10. Количество соединений DB открыл
- 11. F # Использование типов дискретизированных соединений
- 12. Mongoose несколько соединений
- 13. Несколько MySQL DB соединений в PHP хорошая или плохая практика?
- 14. несколько соединений db в одном веб-приложении хорошо или плохо?
- 15. Хорошая практика иметь несколько соединений DB в Symfony2
- 16. Подождите несколько соединений db перед запуском экспресс-сервера?
- 17. Пул соединений db через процессы
- 18. Число соединений DB с использованием
- 19. Как достичь разных типов соединений с LINQ ..?
- 20. Несколько соединений, состояния сеанса
- 21. Несколько соединений WebLogic
- 22. MySQL: несколько выборок, несколько соединений?
- 23. Несколько соединений и несколько потоков
- 24. несколько соединений laravel php
- 25. Пулов соединений и несколько соединений Струна
- 26. Проверка соединений Django DB на сервере запуска
- 27. Doctrine гнездо несколько соединений
- 28. Удалить несколько соединений
- 29. ИОС несколько соединений HTTP
- 30. MySQL открыть несколько соединений
Я привел пример на Java, я думаю, вы можете конвертировать то же самое на любой язык, я понимаю, что вы ожидаете его в PHP. – Techmaddy