在Laravel 5中使用存储库模式时将接口拆分为多个

时间:2015-05-29 19:37:45

标签: php laravel interface repository

我有一个实现EloquentCompanyRepository接口的CompanyRepository类。界面由findallsave等方法和其他常用方法组成。此外,它还有一些方法,例如saveEmailsaveCallsaveSms。除了EloquentCompanyRepository之外,还有一些其他类有saveEmailsaveCall, saveSms方法。

我想将CompanyRepository界面拆分为单独的文件。基本EloquentRepository以及EmailableContractCallableContractSmsableContract等界面。

但是我不明白,服务提供商的绑定是什么?我应该在控制器中使用什么接口?例如,存储库仅实现EloquentRepositoryEmailableContract。而且我不能在控制器中使用这两个接口,因为如果我想获得一个EloquentCompanyRepository类并且它只实现这两个接口,那么我应该在$ app-> bind中使用什么?

我只是不喜欢在多个存储库中重复所有这些方法,如find,all,saveEmail等

1 个答案:

答案 0 :(得分:0)

在Laravel 5中,你有一些名为Contextual Binding的东西。您可以将给定的实现绑定到具有相同要求的不同控制器:

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

这样你就说"当CreateOrderHandler需要EventPusher时,给它一个PubNubEventPusher"的实例。