gpt4 book ai didi

php - setter 、验证器和依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-04 18:21:02 28 4
gpt4 key购买 nike

假设我有一个 Thing 类,并且我需要使用一些由扩展 Zend_Validate_Abstract 的 MySpecificDateValidation 类提供的特定日期验证。

在 Thing 类中,我正在考虑依赖注入(inject)并想知道这段代码是否:

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 /*...*/;
}
}

或者有一些你可以忍受的依赖?

最佳答案

您的第二个选项将更容易 unit test因为您将能够模拟验证器并注入(inject) mocked object而不是真实的。

如果您尝试对第一个选项进行单元测试,您最终会测试 Thing 类以及它所依赖的任何内容,例如验证器。如果单元测试失败,则必须通过所有依赖项跟踪失败。

dependency injection是允许您将您的类与其依赖项隔离开来,以便您单独测试每个类。

因此,从测试的角度来看,您应该始终注入(inject)所有依赖项。

关于php - setter 、验证器和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689964/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com