在构造函数和服务中使用存储库有多种服务是一种好方法吗?

时间:2018-04-10 12:25:37

标签: php laravel

我想知道如果在控制器构造函数中注入多个服务是错误的吗?有没有办法让它更清洁?

示例(UserController):

public function __construct(
        UserService $userService, NewsService $newsService, PaginateService $paginateService, GroupsService $groupsService, HolidaysService $holidaysService,
        CalendarService $calendarService
    )
    {
        parent::__construct();
        $this->userService = $userService;
        $this->newsService = $newsService;
        $this->paginateService = $paginateService;
        $this->groupsService = $groupsService;
        $this->holidaysService = $holidaysService;
        $this->calendarService = $calendarService;
    }

除此之外,我还想知道在注入存储库的服务是否合适 - 例如:我有UserService,在constrcutor中我注入了UserRepository。

示例(UserService):

class UserService {

protected $userRepository;

function __construct(UserRespository $userRepository) {
    $this->userRepository = $userRepository;
}

public function getUsers() {
    $this->userRepository->getAllUsers();
}

}

1 个答案:

答案 0 :(得分:1)

我个人喜欢遵循控制器没有任何自定义方法的模式。因此,您最终会得到许多非常薄的控制器,并最终会阻止您的上述情况(一个控制器依赖于大量服务)。 所以我会将这些服务分解为控制器用例 使用resource index update store create edit等通用destroy方法。

我喜欢使用的另一个模式是使用app帮助程序,而不是将依赖项注入构造函数。 所以你可以使用app(calendarService::class)->method() 这样可以减少代码,减少遗忘。