在构造函数中混合服务和叶对象以进行依赖注入?

时间:2012-03-09 15:43:42

标签: unit-testing language-agnostic dependency-injection

我试图让我的代码尽可能可测试,这意味着正确使用依赖注入。

我已经读过,如果该对象meets certain criteria,可以使用new()来实例化一个对象。值得注意的是 - 它不应该在其构造函数中接受“non newable”。

例如,我应该可以去

new Form('signup');

因为我的DI容器无法提前知道如何创建“注册”表单。

我可以在大部分时间内完成这项工作,但现在我希望表格能够使用第三方验证器验证自己,例如:

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

...这意味着我必须传递验证器服务。

我真的更喜欢已经包含验证器,因为大多数时候表单都需要验证,而且我必须经过额外的工作来自己设置验证器。

没关系,在这种情况下可以这样做:

new Form(Validator $validator,$name); 

1 个答案:

答案 0 :(得分:1)

我要说对象为了处于有效状态所需的任何值或对象是该对象的依赖关系之一;在您的示例中,完全有效地包含表单的名称。我不认为依赖的类型可以用来说明它是否应该注入 - 例如Martin Fowler in this article显示注入了字符串的对象,而DI容器通常可以配置为提供字符串值。

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