Интерфейсы я понимаю по причинам. Единую ответственность я понимаю в рассуждениях. По сути, я понимаю, почему был выбран путь «контракт», я просто пытаюсь понять реализацию.
Например, документы дают нам этот пример:
<?php namespace App\Orders;
use Illuminate\Contracts\Cache\Repository as Cache;
class Repository {
/**
* Create a new repository instance.
*
* @param Cache $cache
* @return void
*/
public function __construct(Cache $cache)
{
$this->cache = $cache;
}
}
Если бы я заменил собственный драйвер кеша laravel на, скажем, сторонний, независимый от фреймворка драйвер кеша, пришлось бы мне тогда писать адаптер, чтобы придерживаться контракта на кеш Laravel 5.0?
Я думаю, что вы спрашиваете Связывание интерфейсов с реализациями.
$this->app->bind('App\Contracts\EventPusher', 'App\Services\PusherEventPusher');
В ‘Осветите / Фонд / application.php’, он сказал контейнеру, каковы псевдонимы для абстрактного ключевого слова:
'cache' => ['Illuminate\Cache\CacheManager', 'Illuminate\Contracts\Cache\Factory'],
таким образом, когда вы пишете либо
$this->app->make('Illuminate\Cache\CacheManager')
или же
$this->app->make('Illuminate\Contracts\Cache\Factory')
это в основном так же, как
$this->app->make('cache')
И в Illuminate \ Cache \ CacheServiceProvider.php он рассказал контейнеру, каковы реальные привязки к абстрактному ключевому слову:
$this->app->singleton('cache', function ($app) {
return new CacheManager($app);
});
Дайте мне знать, если у вас есть другие вопросы.
Других решений пока нет …