Ghid pentru Controller Repository Service Model in Laravel

Ghidul de implementare de bază pentru Controller- Repository- Service model in Laravel vă ajută să vă organizați codul sursă într-un mod ușor de gestionat și întreținut. Iată un exemplu concret despre cum puteți implementa această structură:

Model

Aici definiți atributele și metodele de interacțiune cu baza de date. Laravel oferă mecanismul Eloquent ORM pentru a lucra cu modele. De exemplu, să creăm un model pentru Posts tabel:

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

Repository

Acționează repository ca intermediar între Controller și Model. Conține metode pentru a efectua operațiuni de bază de date prin intermediul model. Acest lucru ajută la separarea logicii bazei de date de controller și facilitează schimbarea sau testarea logicii bazei de date.

// 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

Conține service logica de afaceri și comunică cu Repository. Va Controller apela metode de la pentru Service a gestiona cererile și a returna datele corespunzătoare. Acest lucru ajută la separarea logicii de afaceri de controller și facilitează testarea și întreținerea.

// 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

Acesta controller este locul în care gestionați solicitările utilizatorilor, apelați metode de la pentru a Service prelua sau trimite date și returnați rezultate utilizatorului.

// 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  
}  

Prin aplicarea acestei structuri, puteți gestiona eficient diferite părți ale Laravel aplicației dvs. În plus, separarea logicii de afaceri, a logicii de stocare și a comunicării între clase face ca baza de cod să fie flexibilă, întreținută și testabilă.