0

Triển khai CRUD với Laravel Service-Repository Pattern

image.png

Tại sao lại sử dụng Laravel Service và Repository Pattern?

Có rất nhiều cách mà laravel có thể xây dựng chức năng CRUD. Nhưng cá nhân tôi đề xuất mô hình service-repository design pattern bởi vì nó clear và bền. Khái niệm về repositories and services đảm bảo rằng bạn viết mã có thể sử dụng lại và giúp giữ cho controller của bạn càng đơn giản càng tốt, làm cho chúng dễ đọc hơn.

Repositories thường là một trình bao bọc chung cho mô hình của bạn và là nơi bạn sẽ viết các truy vấn khác nhau trong cơ sở dữ liệu của mình. Mặt khác, một Service là một lớp để xử lý tất cả logic của ứng dụng của bạn. Dựa trên kinh nghiệm, sẽ thực sự hữu ích khi tách biệt logic và trình bao bọc của mô hình, đặc biệt là khi bạn đang làm việc trong nhóm hoặc các dự án lớn.

Để minh họa Service và Repository, chúng tôi sẽ xây dựng một ứng dụng CRUD.

Để bắt đầu, hãy thiết lập Model, Controller và Migration bằng cách thực hiện:

php artisan make:model Post -mcr

  • -m: --migration tạo mới file migration
  • -c: --controller tạo mới file controller
  • -r: --resource để chỉ định controller có tài nguyên hay không

image.png

Route

image.png

Model

image.png

Migration

Sau đó, update post migration như bên dưới rồi thực hiện:

php artisan migrate

image.png

Repository

Laravel không có lệnh tạo repository. Bạn phải làm điều đó bằng tay. Chỉ cần tạo một thư mục Repositories, sau đó thêm file PostRepository và thêm code bên dưới. image.png Gọi model Post trong hàm tạo (construct)

Service

Giống như Repository, laravel không có lệnh tạo Service. Tạo thư mục Services, thêm file PostService và thêm code bên dưới. image.png Gọi PostRepositoryt trong hàm tạo (construct) của class PostService.

Bây giờ chúng ta đã hoàn tất việc thiết lập Service và Repository. Hãy tiếp tục tạo CRUD.

Create

PostController -> PostService -> PostRepository image.png $this->postService->savePostData($data) phần này gọi hàm savePostData trong post service.

Trong post service, xác nhận dữ liệu. Nếu không có lỗi, $this->postRepository->save($data); - Gọi function save trong post repository để lưu dữ liệu trong database. image.png image.png

Nếu có lỗi, chẳng hạn như khi không nhập tiêu đề, thì điều này sẽ được hiển thị khi thực thi trong postman. image.png

Read

  1. GetAllData

image.png image.png image.png

  1. GetById

image.png image.png

Update

image.png image.png image.png

Delete

image.png image.png

Kết luận

Hy vọng chỉ cần nhìn vào ảnh chụp màn hình, bạn đã có thể thấy mô hình và sau đó bạn có thể dễ dàng hiểu tại sao laravel service-repository pattern lại clear và bền vững.

Nguồn


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.