如何在Laravel中正确使用第三方包中的类

如何在Laravel中正确使用第三方包中的类,laravel,Laravel,我应该将它们包装在服务类中还是直接注入 1) 直接使用。缺点:没有合同,强烈依赖于我无法控制的事情。优点:简单 namespace App; use AlienPackageClass; class MyClass { protected $alien_class; public function __construct(AlienPackageClass $class){ $this->alien_class = $class; } } 2) 与包装一起使

我应该将它们包装在服务类中还是直接注入

1) 直接使用。缺点:没有合同,强烈依赖于我无法控制的事情。优点:简单

namespace App;

use AlienPackageClass;

class MyClass {

  protected $alien_class;

  public function __construct(AlienPackageClass $class){
    $this->alien_class = $class;
  }

}
2) 与包装一起使用。缺点:更多的写作。优点:强有力的合同

namespace App\Services;

use AlienPackageClass;

class AlienPackageClassService implements AlienPackageClassInterface {

      protected $alien_class;

      public function __construct(AlienPackageClass $class){
        $this->alien_class = $class;
      }

      public function getSomething(){

      }
}



interface AlienPackageClassInterface {
        public function getSomething(): bool;
}
在这种情况下,我可以注入
AlienPackageClassInterface
,而不是
AlienPackageClass


走哪条路?

“对我无法控制的事物的强烈依赖”
是我的一个关键词。我不想在我的代码中有我无法控制的东西

特别是,如果您认为可能需要实现另一个
AlienPackageClassInterface
实例,那么您可能需要继续第二个选项

但是,正如他们所说,这些东西不必是宗教性的。哪种情况最能解决业务目标应该是赢家

*其他人的回答也遵循此线程