У меня есть следующие объекты: Event
, Ticket
.Я хочу получить информацию о билетах на последнее событие, используя разные источники данных.
Так что в моем контроллере я использую DI:
private $latestEventService;
public function __construct()
{
$this->latestEventService= new LatestEventService();
}
и внутренние методы:
$this->latestEventService->getTicketsAmount();
app/Services/LatestEventService
:
private $provider;
public function __construct($provider = 'db')
{
$this->provider = new config('services.latest_event_providers')[$provider]();
}
public function getTicketsAmount()
{
return $this->provider->getTicketsAmount();
}
public function getFreeTicketsAmount()
{
return $this->provider->getFreeTicketsAmount();
}
public function getDiscountedTicketsAmount()
{
return $this->provider->getDiscountedTicketsAmount();
}
config/services
:
'latest_event_providers' => [
'db' => '\App\Providers\LatestEvent\DBProvider',
'api'=> '\App\Providers\LatestEvent\APIProvider'
]
DBProvider
:
class DBProvider extends ServiceProvider implements ILatestEventProvider
{
public function getTicketsAmount()
{
//fetch from db
}
public function getFreeTicketsAmount()
{
//fetch from db
}
public function getDiscountedTicketsAmount()
{
//fetch from db
}
}
app/Interfaces/ILatestEventProvider
:
interface ILatestEventProvider
{
public function getTicketsAmount();
public function getFreeTicketsAmount();
public function getDiscountedTicketsAmount();
}
Могу ли я оставить все как есть?Я беспокоюсь о DBProvider
, он не знаком другим провайдерам Laravel по умолчанию (нет методов по умолчанию boot()
и register()
).