싱글 톤 패턴을 사용하여 여러 DB 연결을 만드는 방법은 무엇입니까? 아니면 동일한 클래스를 사용하지만 여러 연결을 공유하는 것이 더 나은 방법일까요?여러 DB 연결 클래스
답변
방법 공장 패턴을 사용하여 각각의 연결에 대해 동일한 인스턴스를 반환에 대해, 예를 들어
ConnectionFactory::getInstance(ConnectionFactory::DEVELOPMENT);
개발 데이터베이스에 연결하기 위해 Connection
인스턴스를 반환합니다.
Connection
의 인스턴스화는 ConnectionFactory
에 의해서만 수행되어야하며, 이는 연결 유형으로 고정 된 정적 배열의 인스턴스에 대한 참조를 유지할 수 있습니다. 이렇게하면 싱글 톤 패턴을 피할 수 있지만 각 Connection
의 단일 인스턴스 만 유지할 수 있습니다.
연결 풀링. 자바의 경우
:
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/Code/JDCConnectionPool.java
이 예는 단지 방법을 보여줍니다, 당신은 여전히 더 나은 방법으로 그것을 구현할 수 있습니다.
어떻게 당신이 원하는 여러 경우 싱글 톤 패턴을 삭제 어떻습니까? 최근 Singleton은 anti-pattern으로 변 했으므로 단일 연결이 필요한 경우에도 삭제해야합니다. PHP에서 Singleton을 확장하는 것이 그 순간 꽤 어렵다는 것을 말할 필요도 없습니다.
다른 사람들이 말했듯이, 싱글을 삭제 한 후, 나는 아마 이런 식으로 뭔가를 할 거라고 그런 다음
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');
나를 위해 작품처럼 보인다. 이 싱글 톤 패턴 또는 뭔가 혼합?
아니요 : 싱글 톤은 전역으로 액세스 할 수있는 클래스 인스턴스가 하나만 존재하도록합니다. 디자인은 클래스의 인스턴스를 제한하지만 항상 동일한 인스턴스는 아닙니다. 그 차이가 뚜렷하기를 바랍니다. –
- 1. PHP 클래스 DB 연결
- 2. 여러 DB 연결
- 3. PHP 클래스의 db 연결
- 4. DataMapper DB 연결 닫기
- 5. 파이썬에서 db 연결
- 6. ASP.NET 멤버쉽 DB 연결
- 7. ASP.Net의 기본 DB 연결
- 8. MAC와 MySQL-DB 연결!
- 9. jTDS의 모의 DB 연결?
- 10. 파이썬 db 연결
- 11. 는 연결 DB (더비)
- 12. 파이썬과 DB 연결 추상화?
- 13. PHP와 db 연결
- 14. 활성 연결이없는 DB 연결?
- 15. 엔티티 모델을 통한 DB 액세스 클래스, 연결 정리 방법은 무엇입니까?
- 16. GWT RPC : 여러 요청에서 동일한 DB 연결 사용
- 17. 여러 데이터베이스에 연결
- 18. linq db 연결 문자열 설정
- 19. Blazeds와 Flex mySQL db 연결
- 20. Doctrine 모델에서 db 연결 전환하기
- 21. 함수 들간의 db 연결 전달하기
- 22. 생산에서 DB 연결 문제가 발생했습니다.
- 23. PHP에서 자동 db 연결 닫기?
- 24. PHP 배 DB 연결 해제
- 25. DB 연결 풀링이 모두 중요합니까?
- 26. Sun 웹 서버에서 DB 연결
- 27. JDeveloper DB 기반 MDS 연결 문제
- 28. Java - 메모리 관리/DB 연결 질문
- 29. MySQL 데이터베이스 클래스 - 연결 문제가
- 30. SQL Server보기를 Access db : 성능 질문에 연결
내가 자바의 예를 준, 난 당신이 PHP에 기대 이해, 당신은 어떤 언어로 동일하게 변환 할 수 있다고 생각합니다. – Techmaddy