Разделение интерфейса на несколько при использовании шаблона хранилища в Laravel 5

у меня есть 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 и т. Д. В нескольких репозиториях.

0

Решение

В Laravel 5 у вас есть то, что называется Контекстная привязка. Вы можете привязать данные реализации к различным контроллерам с такими же требованиями, как это:

$this->app->when('App\Handlers\Commands\CreateOrderHandler')
->needs('App\Contracts\EventPusher')
->give('App\Services\PubNubEventPusher');

Таким образом, вы говорите: «Когда CreateOrderHandler требуется EventPusher, предоставьте ему экземпляр PubNubEventPusher».

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]