【发布时间】:2012-05-21 17:41:57
【问题描述】:
假设我有一个 Thing 类,我需要使用由扩展 Zend_Validate_Abstract 的 MySpecificDateValidation 类提供的一些特定日期验证。
在 Thing 类中,我正在考虑依赖注入,想知道这段代码是否:
public function SetDateBegin($dateBegin) {
$dateValidator = new MySpecificDateValidation();
if ($dateValidator->isValid($dateBegin)) {
$this->dateBegin = $dateBegin;
} else {
throw new Exception /*...*/;
}
}
应该重构为:
public function SetDateBegin($dateBegin, MySpecificDateValidation $dateValidator) {
if ($dateValidator->isValid($dateBegin)) {
$this->dateBegin = $dateBegin;
} else {
throw new Exception /*...*/;
}
}
或者有一些你可以忍受的依赖?
【问题讨论】:
-
在创建时将验证器传递给对象而不是每个函数可能会更好。如果从不调用 SetDateBegin,除非你有充分的理由避免额外的包袱,否则需要扔掉的代码会少很多。
-
但是,另一方面,如果我有十几个属性和六个不同的验证器,这(传递创建)会给构造函数带来额外的权重,不是吗?
-
@RodrigoAoCubo 如果你的类有这么多需要重构的依赖项,那么它做的太多了!话虽如此,您将依赖项传递到何处取决于您的用例。
-
也许我有点“夸张”了,或者在我描述它的方式上造成了混淆......我不是在谈论一种方法中的 12 个参数,同时有 6 个不同的验证器,而是类有大约 12 个 setter 和一种不同的验证器,对所有的验证器都不一样。它会变得不那么讨厌吗? :)
-
大声笑,有点不那么讨厌,但不多:)
标签: php oop validation dependency-injection setter