IMPLEMENT CRUD WITH LARAVEL SERVICE

1. Design Pattern là gì?

Design Pattern là những chủng loại kiến tạo chuẩn chỉnh, được đúc rút với tạo nên sau quá trình thao tác làm việc cùng phân tích lâu dài của những chuyên gia.

Bạn đang xem: Implement crud with laravel service

Design Pattern là 1 trong những phương án tổng thể, một khuôn mẫu mã cho những vụ việc bình thường trong xây dựng ứng dụng.

Trong phía đối tượng người tiêu dùng, Design Pattern cho thấy mối quan hệ và shop thân các lớp hoặc những đối tượng người tiêu dùng mà ko đề nghị chỉ rõ đối tượng cụ thể.

Lợi ích của Design Pattern:

Dễ duy trì, upgrade với mở rộng dự ánHạn chế được các lỗi tiềm ẩnCode đọc dễ dàng, dễ nắm bắt với dễ phát triển

2. Repository là gì?

Repository là một mẫu xây dựng trong Design Pattern.

*

Repository là phần trung gian, trung tâm phần tài liệu với phần xử lý logic.

Trong Laravel, nó là cầu nối thân Model và Controller. Repository là khu vực tàng trữ logic truy vấn tài liệu. Các lệnh tầm nã vẫn tài liệu vốn được viết thẳng sinh hoạt controller sẽ được đưa vào Repository. khi kia, Controller sẽ dùng Repository để liên hệ với dữ liệu nạm vị thực hiện thẳng. Việc truy vấn dữ liệu được giấu bí mật trong Repository.

Xem thêm: Hình Nền Đẹp Cho Máy Tính Để Bàn, Attention Required!

Thông thường vào Laravel, những thủ tục nhỏng find, create, update, delete,... được viết khá tương đương nhau, chỉ khác biệt sinh sống thương hiệu Model (đối tượng) nên ảnh hưởng. Vì vậy, các đoạn code này buộc phải chỉ dẫn Repository để tiết kiệm bài toán viết code.

Lợi ích của Repository:

Code dễ đọc, dễ trở nên tân tiến thành phầm vào thao tác nhómGiảm đổi khác code Lúc phần mềm gồm đổi khác kết cấu dữ liệuTránh vấn đề lặp codeHạn chế lỗi vào tróc nã vấnDễ dàng tiến hành test

3. Ví dụ

Cách 1:

Trong thư mục apptrong áp dụng Laravel của người tiêu dùng, chế tạo 1 thư mục có tên là Repositories. Trong thỏng mục đang có:

RepositoryInterface: interface khuôn mẫu, khai báo những thủ tục bình thường cho các Models.BaseRepository: implements RepositoryInterface, xúc tiến những cách thức tầm thường cho các ModelCác tlỗi mục riêng tương xứng với các Model. (Ở phía trên bản thân ví dụ là Product). Trong thỏng mục này chứa:ProductRepositoryInterface: interface cất những cách thức riêng rẽ của Model Product.ProductRepository: implements ProductRepositoryInterface

Trong ProductController, vắt bởi vì viết thẳng truy vẫn, chúng ta sẽ tạo nên controller gồm nằm trong tính $productRepo nhằm truy nã vấn dữ liệu qua nó.

Bước 2: Đăng kí vào app/Providers/AppServiceProvider.php

Lúc khởi chế tạo controller, bọn họ đã gán trực thuộc tính $productRepo có phong cách là ProductRepositoryInterface. Tại sao chưa hẳn là ProductRepository?

Mục đích là nhằm Lúc những xúc tích và ngắn gọn thao tác với dữ liệu chuyển đổi xuất xắc nhằm dễ nắm bắt, các bạn nghĩ đến lúc database đổi khác (ví dụ gửi từ MySQL sang Redis), các lệnh truy vấn vấn dữ liệu đã chuyển đổi. lúc kia, ta đã phải khởi tạo thêm một class ProductRepository không giống (ví dụ RedisProductRepository). Để thuận lợi cho các đổi khác như vậy, ko đề nghị sửa lại các controller đang cần sử dụng repository cũ, ta đăng kí với tiếp đến chỉ việc chuyển đổi repository sinh sống tệp tin app/Providers/AppServiceProvider.php.

public function register() $this->app->singleton( AppRepositoriesProductProductRepositoryInterface::class, AppRepositoriesProductProductRepository::class );

Cách 3: Tạo RepositoryInterface cùng BaseRepository

RepositoryInterface

namespace AppRepositories;interface RepositoryInterface /** * Get all *
return mixed */ public function delete($id);BaseRepository

namespace AppRepositories;use AppRepositoriesRepositoryInterface;abstract class BaseRepository implements RepositoryInterface //Mã Sản Phẩm ao ước thúc đẩy protected $model; //khởi chế tạo ra public function __construct() $this->setModel(); //đem mã sản phẩm tương ứng abstract public function getModel(); /** * Set Model */ public function setModel() $this->mã sản phẩm = app()->make( $this->getModel() ); public function getAll() return $this->model->all(); public function find($id) $result = $this->model->find($id); return $result; public function create($attributes = <>) return $this->model->create($attributes); public function update($id, $attributes = <>) $result = $this->find($id); if ($result) $result->update($attributes); return $result; return false; public function delete($id) $result = $this->find($id); if ($result) $result->delete(); return true; return false;

Cách 4: Viết Interface cùng Repository cho Model khớp ứng.

ProductRepositoryInterface

namespace AppRepositoriesProduct;use AppRepositoriesRepositoryInterface;interface ProductRepositoryInterface extends RepositoryInterface //ví dụ: rước 5 sản phầm trước tiên public function getProduct();ProductRepository

namespace AppRepositoriesPost;use AppRepositoriesBaseRepository;class ProductRepository extends BaseRepository implements ProductRepositoryInterface //đem Mã Sản Phẩm tương xứng public function getModel() return AppModelsProduct::class; public function getProduct() return $this->model->select("product_name")->take(5)->get();

Bước 5: Tạo ProductController

namespace AppHttpControllers;use IlluminateHttpRequest;use AppRepositoriesProductProductRepositoryInterface;class ProductController extends Controller /** *
var PostRepositoryInterface

Tài liệu tsi mê khảo:

https://www.larashout.com/how-to-use-repository-pattern-in-laravel

https://medium.com/employbl/use-the-repository-design-pattern-in-a-laravel-application-13f0b46a3dce