我目前正在使用Laravel,现在对依赖注入和服务容器的工作方式有了很好的掌握。我认为在编程接口时它工作得很好,但具体类呢?
我在控制器和模型之间使用服务层。服务对象的要点是我可以轻松地在其他地方重用他们的方法,比如在不同的控制器中。但有些情况下我还需要在另一个服务中使用服务。
所以我一直在我的服务中使用构造函数进行依赖注入。我有点看到的问题是,有时我只需要1个方法的服务(在我的其他服务中)。所以在构造函数中这样做会使它相当大。另一方面,由于我已经在构造函数中设置了这些参数,因此我无法按需创建实例,因为它需要这些参数。例如,让我们说我有一个OrderService
类,对于构造函数,我看到了两种方法:
public function __construct(FileUploadService $fileUploadService)
{
$this->fileUploadService = $fileUploadService;
}
或
public function __construct()
{
$this->fileUploadService = new FileUploadService;
}
我大部分都是第一次这样做,但一直在思考第二种方式。如果我在应用程序的其他地方需要这个OrderService
,我就不能创建一个新实例,因为它依赖于FileUploadService
,除非我也创建了一个新实例。但你可以看到它会在没有依赖注入的情况下开始级联,因为如果FileUploadService
依赖于什么呢?它更容易从容器中解析出来。
也许我缺少了一些东西,因为它在某些方面几乎感觉像是一个捕获22。我想要注意的是,我注入的这些课程中的大多数都是具体的课程,所以我不需要在任何特定的时间点将它们交换出来。
我已经考虑过在构造函数中为我需要的每个服务创建一个新实例,这样我也可以在不提供参数的情况下新建实例。但我喜欢遵循最佳实践,所以我想知道其他有经验的开发人员对此有何想法。