دليل Controller Repository Service Model في Laravel

يساعدك دليل التنفيذ الأساسي لـ Controller- Repository- Service model في Laravel على تنظيم التعليمات البرمجية المصدر الخاصة بك بطريقة تسهل إدارتها وصيانتها. فيما يلي مثال ملموس لكيفية تنفيذ هذا الهيكل:

Model

هذا هو المكان الذي تحدد فيه السمات والأساليب للتفاعل مع قاعدة البيانات. Laravel يوفر آلية Eloquent ORM للعمل مع النماذج. على سبيل المثال، لنقم بإنشاء model جدول Posts:

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

Repository

يعمل repository كوسيط بين Controller و Model. يحتوي على طرق لتنفيذ عمليات قاعدة البيانات من خلال ملف model. يساعد هذا على فصل منطق قاعدة البيانات عن منطق قاعدة البيانات controller ويسهل تغيير منطق قاعدة البيانات أو اختباره.

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

يحتوي service على منطق الأعمال ويتواصل مع Repository. سيتم Controller استدعاء الأساليب من Service للتعامل مع الطلبات وإرجاع البيانات المقابلة. ويساعد ذلك على فصل منطق الأعمال عن منطق العمل controller ويجعل الاختبار والصيانة أسهل.

// 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 هو المكان الذي تتعامل فيه مع طلبات المستخدم، وطرق الاتصال من أجل Service استرداد البيانات أو إرسالها، وإرجاع النتائج إلى المستخدم.

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

ومن خلال تطبيق هذه البنية، يمكنك إدارة أجزاء مختلفة من تطبيقك بكفاءة Laravel. بالإضافة إلى ذلك، فإن فصل منطق الأعمال ومنطق التخزين والتواصل بين الفئات يجعل قاعدة التعليمات البرمجية الخاصة بك مرنة وقابلة للصيانة وقابلة للاختبار.