Доброго времени суток.
Был создан магазин на основе
https://github.com/Laracommerce/laracom на ларавел.
В процессе работы было замечено что наряду с подтягиванием реализации под интерфейс вызовом типа:
use App\Shop\Products\Repositories\Interfaces\ProductRepositoryInterface;
связывание которых объявлено в RepositoryServiceProvider (app\Providers\RepositoryServiceProvider.php),
$this->app->bind(
ProductRepositoryInterface::class,
ProductRepository::class
);
используются прямые вызовы типа
use App\Shop\Products\Repositories\ProductRepository;
(например здесь app/Shop/Orders/Repositories/OrderRepository.php)
В коде можно найти несколько подобных примеров и чаще всего прямое указание адреса необходимо для вызова конструкции new Repository(ОбъектМодели). Например
public function buildOrderDetails(Collection $items)
{
$items->each(function ($item) {
$productRepo = new ProductRepository(new Product);
$product = $productRepo->find($item->id);
if ($item->options->has('product_attribute_id')) {
$this->associateProduct($product, $item->qty, [
'product_attribute_id' => $item->options->product_attribute_id
]);
} else {
$this->associateProduct($product, $item->qty);
}
});
}
Не нашел однозначного выхода из данной ситуации, прошу совета тех кто сталкивался с примером качественной реализации паттерна Репозиторий на laravel.