Я работаю с Laravel 5, и я начинающий разработчик, поэтому я только что узнал, как использовать шаблон Repository. Теперь, когда новички идут, я сначала использую файл rout.php, чтобы связать мой UserRepositoryInterface
в DbUserRepository
вот так:
App::bind('UserRepositoryInterface', 'DbUserRepository');
Это просто psuedo, изобразите пространства имен с помощью приведенного выше кода.
Поэтому после этого я понял, что существует нечто, называемое поставщиком услуг, которое должно содержать такой код. Теперь я рефакторинг это в AppServiceProvider
в моем Providers
папка и все отлично работает.
Но так как у меня будет намного больше репозиториев, это хорошая идея, чтобы поместить их в AppServiceProvider
или я должен пойти дальше и сделать специального провайдера для своих репозиториев и связать их там? Каков наилучший способ сделать это? Есть ли для этого стандарт?
Позже я понял, что это все о предпочтениях, поэтому я написал RepositoryServiceProvider
в котором я связываю все контракты репозитория с желаемыми реализациями следующим образом:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Archive\Repositories\TenantRepository;
use Archive\Repositories\TenantRepositoryEloquent;
use Archive\Repositories\UserRepository;
use Archive\Repositories\UserRepositoryEloquent;
use Archive\Repositories\OrderRepository;
use Archive\Repositories\OrderRepositoryEloquent;
class RepositoryServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind(TenantRepository::class, TenantRepositoryEloquent::class);
$this->app->bind(UserRepository::class, UserRepositoryEloquent::class);
$this->app->bind(OrderRepository::class, OrderRepositoryEloquent::class);
}
}
Других решений пока нет …