La guía de implementación básica para Controller- Repository- Service model in Laravel le ayuda a organizar su código fuente de una manera que sea fácil de administrar y mantener. A continuación se muestra un ejemplo concreto de cómo se puede implementar esta estructura:
Model
Aquí es donde define los atributos y métodos para interactuar con la base de datos. Laravel proporciona el mecanismo Eloquent ORM para trabajar con modelos. Por ejemplo, creemos un model para la Posts
tabla:
// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
Repository
El repository actúa como intermediario entre el Controller y el Model. Contiene métodos para realizar operaciones de bases de datos a través de model. Esto ayuda a separar la lógica de la base de datos controller y facilita cambiar o probar la lógica de la base de datos.
// 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
Contiene service lógica empresarial y se comunica con Repository. Llamará Controller a los métodos para Service manejar las solicitudes y devolverá los datos correspondientes. Esto ayuda a separar la lógica empresarial de la lógica empresarial controller y facilita las pruebas y el mantenimiento.
// 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
Es controller donde maneja las solicitudes de los usuarios, llama a métodos desde Service para recuperar o enviar datos y devolver resultados al usuario.
// 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
}
Al aplicar esta estructura, puede administrar de manera eficiente diferentes partes de su Laravel aplicación. Además, separar la lógica comercial, la lógica de almacenamiento y la comunicación entre clases hace que su base de código sea flexible, mantenible y comprobable.