2012-03-09 176 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容器通常可以配置为提供字符串值。

考虑到这一点,在我看来,注入验证器和字符串是正确的,并且完全正确。

相关问题