Gids naar Controller Repository Service Model binnen Laravel

De basisimplementatiegids voor de Controller- Repository- Service model in Laravel helpt u uw broncode te organiseren op een manier die gemakkelijk te beheren en te onderhouden is. Hier is een concreet voorbeeld van hoe u deze structuur kunt implementeren:

Model

Hier definieert u de attributen en methoden voor interactie met de database. Laravel biedt het Eloquent ORM-mechanisme om met modellen te werken. Laten we bijvoorbeeld een model voor de Posts tabel maken:

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

Repository

Het repository fungeert als tussenpersoon tussen de Controller en de Model. Het bevat methoden om databasebewerkingen uit te voeren via het model. Dit helpt om de databaselogica te scheiden van de databaselogica controller en maakt het eenvoudig om de databaselogica te wijzigen of te testen.

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

Het service bevat bedrijfslogica en communiceert met het Repository. Ze Controller zullen methoden van de app aanroepen om Service verzoeken af ​​te handelen en de bijbehorende gegevens terug te sturen. Dit helpt de bedrijfslogica te scheiden van de bedrijfslogica controller en maakt testen en onderhoud eenvoudiger.

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

Hier controller handelt u gebruikersverzoeken af, roept u methoden aan om Service gegevens op te halen of te verzenden en retourneert u resultaten naar de gebruiker.

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

Door deze structuur toe te passen, kunt u verschillende onderdelen van uw Laravel applicatie efficiënt beheren. Bovendien maakt het scheiden van de bedrijfslogica, opslaglogica en communicatie tussen klassen uw codebase flexibel, onderhoudbaar en testbaar.