Construindo um Laravel aplicativo com Dependency Injection

Neste artigo, vamos percorrer a construção de um Laravel aplicativo usando Dependency Injection para gerenciar dependências e criar uma estrutura de código-fonte mais fácil de manter. Vamos criar um exemplo simples de gerenciamento de uma lista de produtos em uma loja.

Passo 1: Preparação

Em primeiro lugar, certifique-se de ter Laravel instalado em seu computador. Você pode usar Composer para criar um novo Laravel projeto:

composer create-project --prefer-dist laravel/laravel DependencyInjectionApp

Depois de criar o projeto, navegue até o diretório do projeto:

cd DependencyInjectionApp

Passo 2: Crie Service e Interface

Vamos começar criando um service para gerenciar a lista de produtos. Crie uma interface classe e uma que implemente isso interface:

Crie o arquivo app/Contracts/ProductServiceInterface.php:

<?php  
  
namespace App\Contracts;  
  
interface ProductServiceInterface  
{  
    public function getAllProducts();  
    public function getProductById($id);  
}  

Crie o arquivo app/Services/ProductService.php:

<?php  
  
namespace App\Services;  
  
use App\Contracts\ProductServiceInterface;  
  
class ProductService implements ProductServiceInterface  
{  
    public function getAllProducts()  
    {  
        // Logic to get all products  
    }  
  
    public function getProductById($id)  
    {  
        // Logic to get product by ID  
    }  
}  

Etapa 3: registrar-se no Service contêiner

Abra o arquivo app/Providers/AppServiceProvider.php e adicione à register função:

use App\Contracts\ProductServiceInterface;  
use App\Services\ProductService;  
  
public function register()  
{  
    $this->app->bind(ProductServiceInterface::class, ProductService::class);  
}  

Passo 4: Usando Dependency Injection

No controlador, você pode usar Dependency Injection para injetar ProductService:

use App\Contracts\ProductServiceInterface;  
  
public function index(ProductServiceInterface $productService)  
{  
    $products = $productService->getAllProducts();  
    return view('products.index', compact('products'));  
}  

Conclusão

Utilizando Dependency Injection e o Service Container em Laravel, construímos um aplicativo para gerenciar uma lista de produtos. Essa abordagem torna o código-fonte mais fácil de manter e reduz as dependências entre os diferentes componentes do aplicativo.

Pratique e personalize o projeto de acordo com suas necessidades para obter uma compreensão mais profunda do uso Dependency Injection em Laravel.