注入还是新?

2022-08-30 23:13:29

关于在另一个类中使用类对象,最佳实践是什么?要传递类中的类对象_construct语句还是创建新的类对象?

示例 1:

class Foo {
    private $bar;

    public function __construct($bar){
       $this->bar = $bar;
   }
}

或示例 2:

class Foo {

    private $bar;

    public function __construct(){
        $this->bar= NEW bar;
    }    
}

我知道,显然,类文件必须已经包含在其他地方是理所当然的,首先,这种类型的类对象已经存在,但我想知道每种方法的优点是什么,因为我有很多类需要使用数据库对象进行编码,我需要将其传递到类中的最佳方法。有没有第三种选择比这两个更好的选择?

据我所知,第一个的优点可能是编码行数更少,并且在DB的情况下,没有创建新的连接。然而,第二个可能更好,因为它更独立?无论如何,我想我会问专家。


答案 1

第一个。(此方法称为依赖关系注入)。

构造函数要求问题对象工作所需的任何内容。这样,仅从方法(它们需要什么,以及它们返回什么)就可以清楚地看出它的作用。甚至不用看源代码。

改进代码的一种方法是在方法中引入类型提示:

class Foo {
    private $bar;

    public function __construct(Bar $bar){
       $this->bar = $bar;
   }
}

这样,只有对象才能传入。Bar


依赖注入的优点

  • 非常可读。
  • 能够在不查看源代码的情况下告诉方法的依赖项。
  • 使单元测试成为可能。
  • *拯救小猫脱离神的忿怒。

*免责声明:在显示此答案期间没有小猫受到伤害


答案 2

您应该选择选项1,因为这是最简单的依赖关系注入形式。

在选项 1 中:

  • 类彼此独立
  • 类可以独立测试,使用柱线类的模拟

推荐