2014-05-10 3 views
0

내가 어떤 방향으로 가야할지 모르겠다. 지금까지 PDO 객체를 종속물로 전달할 때 종속성 주입을 사용합니다.의존성 주입으로 싱글 톤을 혼합하는 PHP

이것은 꽤 잘 작동하지만, 현재 컨텍스트 클래스가 있어야합니다. 예를 들어 현재 사용자의 정보를 보유하고 있어야합니다.

class Context 
{ 
    private $Pdo; 

    function __construct(PDO $Pdo) { 
     $this->Pdo = $Pdo; 
    } 

    function CurrentUser(){ 
     if ($this->CurrentUser == null){ 
      // get user logic 
         $this->CurrentUser = User; 
     } 
     return $this->CurrentUser; 
    } 
} 

그래서 때마다 나는 현재 사용자를 좀하고 싶습니다 나는 같은 것을 할 필요가있을 것이다 :

$Context = new Context($Pdo); 
$User = $Context->CurrentUser(); 

나는이 사용할 수 있도록하고 싶습니다이 같은 수 프로젝트의 어느 곳에서나 사용할 수 있지만 PDO는 각 메소드에 전달되지 않습니다.

필자는 PDO 개체를 필요한 곳 ​​어디서나 가져 와서 사용할 수있는 싱글 톤 클래스를 만들 수 있으며이를 내 Context 클래스에서 사용할 수 있습니다. 이것이 좋은 방향일까요? 아니면 공장 디자인이 더 좋을까요?

지금까지는 그런 경우 전역을 사용했지만 프로젝트가 급속히 성장하면서 피할 수 있었을 것입니다.

답변

0

어디서나 PDO 객체를 가져 오기위한 싱글 톤 클래스를 만들 수 있습니다. 필요하며이를 내 Context 클래스에서 사용하십시오. 이것이 좋은 방향일까요? 공장 설계가 더 좋을까요?

글쎄, 싱글 톤과 팩토리는 실제로 같은 것이 아니며, 당신의 특별한 요구가 해결책을 제시해야합니다.

싱글 톤 패턴은 하나의 객체에 대한 클래스의 인스턴스를 제한합니다

는 여기 more in-depth post의 짧은 요약 한 것입니다. 이렇게하면 전체 응용 프로그램에 단일 액세스 지점이 제공되므로 항상 동일한 개체를 처리해야합니다.

팩토리 패턴은 호출 될 때마다 객체의 새 인스턴스를 제공합니다. 이것은 동일한 인스턴스 일 수도 같지 않을 수도 있습니다. 본질적으로 팩토리는 객체를 생성하기위한 인터페이스를 정의합니다.

귀하의 요구에 따라 귀하의 신청에 적합한 패턴이 결정됩니다. 객체의 단일 인스턴스가 필요하면 싱글 톤으로 이동하십시오.

+0

안녕하세요, 디자인 패턴의 작동 방식을 알고 있지만, 어떤 방식 으로든 언제 어디서나 사용할 수있는 Context 클래스를 사용하는 경우 어떤 접근 방식이 가장 좋을지에 대해 더 많은 관심을 가졌습니다. :) 특별한 나쁜 습관으로 간주 되나요? 더 나은 방법을 찾을 수없는 것 같습니다. – user3370402

+0

@ user3370402 - 어디서나 PDO 개체의 단일 인스턴스를 사용할 수 있도록하려면 싱글 톤 패턴이 좋을 것입니다. 대안을 시도하고 싶다면 레지스트리 패턴을 사용하십시오.하지만 Simpleton은 구현/이해가 훨씬 쉬울 것입니다. 나는 싱글 톤에 대해 혼합 된 감정을 가지고 있지만 널리 사용되며 구현하기가 매우 쉽다. 그래서 문제가 해결된다면 그것을 가져라. –