у меня есть EloquentCompanyRepository
класс, который реализует CompanyRepository
интерфейс. Интерфейс состоит из таких методов, как find
, all
, save
и другие распространенные методы. Плюс у этого есть некоторые методы как saveEmail
, saveCall
, saveSms
, Помимо EloquentCompanyRepository
Есть некоторые другие классы, которые имеют saveEmail
, saveCall,
saveSms
методы.
Я хочу разделить CompanyRepository
интерфейс в отдельные файлы. основной EloquentRepository
и некоторые интерфейсы, такие как EmailableContract
,CallableContract
а также SmsableContract
,
Однако я не понимаю, что будет обязательным в поставщике услуг? Какой интерфейс я должен использовать в контроллерах? Существует ситуация, когда репозиторий будет реализовывать только EloquentRepository
а также EmailableContract
например. И я не могу использовать оба интерфейса в контроллере, так как если я хочу получить EloquentCompanyRepository
класс, и он реализует только эти два интерфейса, то что я должен использовать в $ app-> bind?
Я просто не люблю повторять все эти методы, такие как find, all, saveEmail и т. Д. В нескольких репозиториях.
В Laravel 5 у вас есть то, что называется Контекстная привязка. Вы можете привязать данные реализации к различным контроллерам с такими же требованиями, как это:
$this->app->when('App\Handlers\Commands\CreateOrderHandler')
->needs('App\Contracts\EventPusher')
->give('App\Services\PubNubEventPusher');
Таким образом, вы говорите: «Когда CreateOrderHandler требуется EventPusher, предоставьте ему экземпляр PubNubEventPusher».
Других решений пока нет …