我有一个“Validator”类,可以对数据数组进行任意检查。例如,检查数组中给定值的字符串长度。验证器还可以检查给定值,并查看它在数据库中是否唯一。
我想对这个类进行适当的依赖注入,但是,我正在努力在这种情况下如何实现它。验证器不需要数据库连接才能运行。所有其他验证检查在没有数据库连接的情况下工作正常。现在,我可以选择使用属性注入来指定连接。或者,如果没有通过属性注入指定连接,我使用服务定位器模式来解析来自IoC容器的默认连接。
我做错了吗?处理类不需要的类依赖关系的正确方法是什么?
我目前正在使用验证器:
$rules = array(
'email' => 'required|unqiue:users',
'password' => 'required|confirmed',
);
$validator = new Validator($attributes, $rules);
当然,“唯一”规则告诉验证者检查“用户”表上电子邮件地址的唯一性。
答案 0 :(得分:1)
使用接口或抽象类来仅加载当前案例的正确实现。就个人而言,我几乎从未需要使用其中任何一种,但它们专门用于解决依赖性问题。
答案 1 :(得分:0)
不知道你的问题是否有正确(或接近正确)的答案,但现在就这样了。
正如您在问题中所述,由于您的验证器需要数据库连接,那就是您不依赖于注入实例的实现来“做一些工作”,那么您可能不会需要实施DI。
毕竟您可能不需要它,只需要将数据库连接处理程序或数据库访问层的引用传递给需要它的方法。当然,这可能需要对代码进行一些更改。