Aslında senin sorunla ilgili temel ayrıntıyı yazmamışım bak unutmusum
senin kullanımın şu şekilde;
private $productRepository;
public function __construct()
{
$this->productRepository = new ProductRepository();
}
benim önerdiğim ise şu şekilde;
$this->app->bind(BlogRepositoryInterface::class,BlogRepository::class);
BlogRepositoryInterface.php
interface BlogRepositoryInterface
{
public function getPostsLastYear();
}
BlogRepository.php
class BlogRepository implements BlogRepositoryInterface
{
public function getPostsLastYear()
{
return Blog::lastYear()->get();
}
}
controllercü kullanımı şu şekilde;
protected $blogRepository;
public function __construct(BlogRepositoryInterface $blogRepository)
{
$this->blogRepository = $blogRepository;
}
senin kullanımınla arasında hemen hemen fark yok gibi değil mi ? görünürde öyle gibi duruyor.
Ama öyle değil işte..Ben providerdaki abstract olan interface i değiştirmiyorum..ama işi yapan sınıfı değiştirebilirim
$this->app->bind(BlogRepositoryInterface::class,BlogNewRepository::class);
gördüğün gibi concrete nesne değişti..ama problem yok..başka hiç bir şey yapmayacagım..
gidip controllercülerdeki nesneler aynı kalacak..değiştirmeme gerek yok..
Bunu sadece bu basic haliyle dusunmeyin.Mesela somut bir örnek olsun..
$this->app->bind(InternetServiceInterface::class,Tttnet::class);
evet internet hizmeti için ttneti kullanıyorum ve 50 yerde de kontrolcülerim internetserviceınterface nesnesini kullanıyor..problem yok..
ben superonline a cok rahat bir şekilde gecebilirim..
yapmam gereken şey..
$this->app->bind(InternetServiceInterface::class,SuperOnline::class);
bu kadar basit..arasındaki fark bu..