Guia para Controller Repository Service Model dentro Laravel

O guia básico de implementação para Controller- Repository- Service model in Laravel ajuda a organizar seu código-fonte de uma forma fácil de gerenciar e manter. Aqui está um exemplo concreto de como você pode implementar esta estrutura:

Model

É aqui que você define os atributos e métodos para interagir com o banco de dados. Laravel fornece o mecanismo Eloquent ORM para trabalhar com modelos. Por exemplo, vamos criar um model para a Posts tabela:

// app/Models/Post.php  
namespace App\Models;  
  
use Illuminate\Database\Eloquent\Model;  
  
class Post extends Model  
{  
    protected $fillable = ['title', 'content'];  
}  

Repository

O repository atua como intermediário entre o Controller e o Model. Ele contém métodos para realizar operações de banco de dados por meio do model. Isso ajuda a separar a lógica do banco de dados controller e facilita alterar ou testar a lógica do banco de dados.

// app/Repositories/PostRepository.php  
namespace App\Repositories;  
  
use App\Models\Post;  
  
class PostRepository  
{  
    public function create($data)  
    {  
        return Post::create($data);  
    }  
      
    public function getAll()  
    {  
        return Post::all();  
    }  
      
    // Other similar methods  
}  

Service

O service contém lógica de negócios e se comunica com o Repository. O Controller irá chamar métodos para Service lidar com solicitações e retornar os dados correspondentes. Isso ajuda a separar a lógica de negócios da lógica de negócios controller e facilita os testes e a manutenção.

// app/Services/PostService.php  
namespace App\Services;  
  
use App\Repositories\PostRepository;  
  
class PostService  
{  
    protected $postRepository;  
      
    public function __construct(PostRepository $postRepository)  
    {  
        $this->postRepository = $postRepository;  
    }  
      
    public function createPost($data)  
    {  
        return $this->postRepository->create($data);  
    }  
      
    public function getAllPosts()  
    {  
        return $this->postRepository->getAll();  
    }  
      
    // Other similar methods  
}  

Controller

É controller onde você lida com as solicitações do usuário, chama métodos para Service recuperar ou enviar dados e retorna resultados ao usuário.

// app/Http/Controllers/PostController.php  
namespace App\Http\Controllers;  
  
use Illuminate\Http\Request;  
use App\Services\PostService;  
  
class PostController extends Controller  
{  
    protected $postService;  
      
    public function __construct(PostService $postService)  
    {  
        $this->postService = $postService;  
    }  
      
    public function create(Request $request)  
    {  
        $data = $request->only(['title', 'content']);  
        $post = $this->postService->createPost($data);  
        // Handle the response  
    }  
      
    public function index()  
    {  
        $posts = $this->postService->getAllPosts();  
        // Handle the response  
    }  
      
    // Other similar methods  
}  

Ao aplicar essa estrutura, você pode gerenciar com eficiência diferentes partes do seu Laravel aplicativo. Além disso, separar a lógica de negócios, a lógica de armazenamento e a comunicação entre classes torna sua base de código flexível, sustentável e testável.