2012-03-09 177 views
1

我試圖使我的代碼儘可能可測試,這意味着正確使用依賴注入。在依賴注入的構造函數中混合服務和葉對象?

我讀過,可以使用new()來實例化一個對象,如果該對象爲meets certain criteria。值得注意的是 - 它不應該在其構造函數中接受「不可新的」。

舉例來說,我應該能夠去

new Form('signup'); 

,因爲沒有辦法,我的DI容器會知道如何提前創建的「註冊」的形式。

我可以做這項工作的大部分時間,但現在我想的形式能夠驗證本身,使用第三方驗證,如:

$form->validate()->isValid(); 

...這意味着我將不得不通過驗證器服務。

我真的希望已經包含驗證器,因爲大部分時間表單需要驗證,而且我必須經過額外的工作才能自行設置驗證器。

它是好的,在這種情況下要做到:

new Form(Validator $validator,$name); 

回答

1

我會說,它的對象需要以任何值或對象是處於有效狀態的是對象的依賴性之一;在你的例子中,將完全有效地包含表單的名稱。我不認爲可以使用依賴關係的類型來說明它是否應該被注入 - 例如Martin Fowler in this article顯示了注入字符串的對象,並且DI容器通常可以配置爲提供字符串值。

考慮到這一點,在我看來,注入驗證器和字符串是正確的,並且完全正確。

相關問題