Что я должен использовать Dependency Injection или Binding в Laravel 5? - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть класс UserRepository

class UserRepository
{
    public function getUsersByCompany(Company $company)
    {
    }
}

Для использования этого класса в контроллере я использую Dependency Injection

class UserController extends Controller {

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

    public function index(Company $company)
    {
        retrurn $this->repository->getUsersByCompany($company);
    }
}

Также я могу использовать Binding

class AppServiceProvider extends ServiceProvider
{
   /**
    * Bootstrap any application services.
    *
    * @return void
    */
   public function boot()
   {
   }
   public function register()
   {
         $this->app->singleton('user-repository', function ($app) {
               return $this->app->make(UserRepository::class);
         });
   }
}
class UserController extends Controller {

   public function index(Company $company)
   {
       retrurn app('user-repository')->getUsersByCompany($company);
   }
}

Я не понимаю, какой путь лучше?Чему я должен отдавать приоритет?

1 Ответ

0 голосов
/ 02 апреля 2019

В случае $this->app->singleton это создаст только один экземпляр хранилища и будет использовать его в других местах, где вы делаете app('user-repository'), вместо создания нового объекта.Если у вас нет сложных зависимостей для хранилища, я бы остановился на __construct(UserRepository $repository) в контроллере.Это используется для автоматического разрешения любых зависимостей, которые достаточно просты для Laravel, например, имен классов, а не интерфейсов.Поскольку ваш репозиторий не зависит ни от чего другого, вы также можете сделать

(new UserRepository())->getUsersByCompany($company);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...