2014-05-10 24 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

我可以創建一個單例類,用於獲取我的Context類中需要使用的PDO對象。這是一個很好的方法嗎? 或者工廠設計會更好嗎?

嗯,Singleton和Factory並不是真的是一回事,你的特殊需求應該決定解決方案。

這裏是一個more in-depth post的簡短摘要:

的單例模式限制了類的單個對象的實例化。這提供了跨整個應用程序的單一訪問點,並確保您始終處理同一個對象。

工廠模式每次調用時都會提供對象的新實例。這可能是也可能不是同一個例子。基本上,工廠定義了一個用於創建對象的接口。

因此,您的需求將決定哪種模式更適合您的應用程序。如果您想要一個對象的單個實例,請使用單例。

+0

嘿,感謝您的輸入,但是我知道設計模式是如何工作的,我更感興趣的是哪種方法最適合在具有上下文類的情況下,隨時隨地可用。被認爲是一種特別糟糕的做法?我似乎無法找出一個更好的方法.. – user3370402

+0

@ user3370402 - 如果您希望在任何地方都可以使用您的PDO對象的單個實例,那麼Singleton模式應該沒問題。如果你想嘗試一個替代方案,請使用註冊表模式......但是我的Simpleton將更容易實現/理解。我對單身人士有着複雜的感受,但是它們被廣泛使用並且*很容易實現,所以如果它解決了你的問題,就去做吧。 –