Repository là một trong những design pattern được giới thiệu trong Magento 2 cùng với interceptors, proxy…Repository cung cấp cách để truy cập và thao tác với cơ sở dữ liệu, dịch vụ web hoặc bất kỳ phương tiện nào khác. Nói một cách đơn giản, bạn có thể nói các Repository hoạt động như một API để các nhà phát triển bên thứ ba truy cập và làm việc với dữ liệu phức tạp của tiện ích mở rộng của bạn. Trong bài viết này chúng ta cùng nhau tìm hiểu về Repository trong Magento 2.
Vấn đề
Giả sử một nhà phát triển bên thứ ba muốn truy cập một số dữ liệu từ module của bạn, anh ấy kiểm tra trong module của bạn để tìm kiếm cách để anh ấy có thể lấy dữ liệu, anh ta tìm ra một hàm nhưng anh ta không thể sử dụng hàm đó vì nó có một số phụ thuộc ở đó và anh ta muốn chuyển những phụ thuộc đó làm đối số.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public function execute() { $data = $this->getRequest()->getParams(); $model = $this->modelFactory->create(); $model->adData($data); $model->save(); } // function gốc có một số phụ thuộc(dependency) //nên cần chuyển phụ thuộc này thành đối số để sử dụng cho module bên thứ 3 public function save($model) { $this->resourceModel->save($model); } |
Vì vậy anh ta sẽ chỉ cần sao chép function đó và sẽ sử dụng nó trong module của mình, sử dụng điều này sẽ giải quyết vấn đề trong thời gian tạm thời. Bây giờ bất cứ khi nào bản cập nhật của module gốc được phát hành, nhà phát triển cần kiểm tra các thay đổi trong code và sửa đổi nó trong module của mình, nếu không module sẽ bị hỏng hoặc hoạt động không tốt, và trong một hệ thống phức tạp như việc lấy và cập nhật dữ liệu thì điều đó không phải là một nhiệm vụ dễ dàng.
Một số vấn đề có thể phát sinh nếu bạn không sử dụng cách tiếp cận tiêu chuẩn:
- Code bị trùng lặp
- Code dễ bị lỗi
- Khó kiểm tra code
Giải pháp và lợi ích của repository
Vì vậy, để giải quyết vấn đề này, magento2 đã giới thiệu repository design pattern. Nó hoạt động như một trung gian giữa việc truy cập dữ liệu và người truy cập dữ liệu. Nó tập trung tất cả logic truy cập dữ liệu cho module vào một nơi tức là ẩn đi các business logic. Vì thế các nhà phát triển bên thứ 3 không cần phải quan tâm đến logic chúng viết như thế nào hoặc chúng lấy dữ liệu bằng cách nào mà anh ấy chỉ cần quan tâm đến tham số truyền vào kết quả trả về là gì. Đó cũng chính là lợi ích đầu tiên của repository trong Magento 2.
Bằng cách sử dụng Repository, code của bạn sẽ sạch hơn, dễ đọc và sửa đổi hơn.
Repository có thể dễ dàng chuyển đổi sang dịch vụ web, vì vậy bạn không cần phải viết lại API dịch vụ web.
Cuối cùng, repository sẽ ít bị thay đổi khi Magento có bản cập nhật mới trừ khi là bản cập nhật lớn, vì thế sử dụng repository code của bạn sẽ sử dụng được khi cập nhật Magento.
Kết luận
Vừa rồi tôi đã giới thiệu cho các bạn về Repository trong Magento 2. Bài viết tiếp theo tôi sẽ hướng dẫn các bạn cách tạo repository nhé.