Repository pattern là gì

     

Trong bài viết này tôi đã chỉ cho chính mình cách thiết lập cấu hình Repository design pattern trong Laravel trường đoản cú đầu. Tôi sẽ sử dụng phiên phiên bản Laravel 5.8.3, mà lại phiên bạn dạng Laravel cũng không thực sự quá quan liêu trọng. Trước lúc chúng tôi ban đầu code, tất cả một đôi điều bạn nên biết về repository design pattern.

Bạn đang xem: Repository pattern là gì

*

Điều này tức là Business Logic của khách hàng không nên biết cách lấy lại dữ liệu hay nguồn tài liệu là gì. Business ngắn gọn xúc tích dựa trên repository để mang dữ liệu chính xác.

Một quan lại niệm sai trái mà tôi thấy không ít là các repository đang được triển khai theo bí quyết tạo hay update các bạn dạng ghi. Đây ko phải là những gì mà repository đề xuất làm. Những kho tàng trữ không đề xuất tạo hoặc cập nhật dữ liệu, nhưng nên làm được thực hiện để tầm nã xuất dữ liệu.

Tuyển dụng Laravel lương cao đến bạn


18 designer hàng đầu dự đoán về xu thế UI/ UX trong thời gian 2022
30 tiện ích Chrome mang đến designer và dev

Hãy hợp tác vào việc code bây giờ.

Bởi vì tôi hướng dẫn các bạn làm trường đoản cú đâu, đầu tiên ta phải tạo một project laravel trước.

php artisan config:clearĐối với phần khuyên bảo này, tôi sẽ khởi tạo ra một blog nhỏ. Hiện nay chúng tôi đã tạo nên một project, cửa hàng chúng tôi cần chế tạo Controller và model cho blog.

php artisan config:clearCái này sẽ tạo BlogController vào tệp app/Http/Controllers

php artisan config:clearGhi chú: tuyển lựa -m sẽ khởi tạo ra một Data Migration (chuyển đổi dữ liệu). File này rất có thể được tìm thấy vào database/migrations

Điều này đang tạo model cho Blog của người sử dụng và tàng trữ nó trong thư mục app / Models. Đây chỉ là 1 trong trong những phương pháp để lưu trữ các mã sản phẩm của bạn, cùng là phương pháp mà tôi thích.

Bây giờ họ đã tất cả Controller cùng Model, đã tới lúc xem tệp đổi khác mà họ đã tạo. Hiện giờ blog phải một tiêu đề, văn bản và ngôi trường user_id; ở bên cạnh các trường timestamp (dấu thời gian) nhưng là mang định của Laravel.

bigIncrements("id"); $table->string("title"); $table->text("content"); $table->integer("user_id"); $table->timestamps(); $table->foreign("user_id") ->references("id") ->on("users"); }); } public function down() Schema::dropIfExists("blogs"); }Ghi chú: nếu khách hàng đang sử dụng phiên bản cũ rộng Laravel 5.8, bạn nên sửa chữa thay thế dòng

php artisan config:clear

Thiết lập kho database:

Tôi sử dụng MySQL mang đến ví dụ này. Bước đầu tiên là tạo ra một cơ sở tài liệu mới.

mysql -u root -pcreate database laravel_repository;Điều này sẽ tạo nên ra một database gọi là laravel_repository. Tiếp theo chúng ta phải thêm thông tin cơ sở tài liệu vào tệp .env

DB_DATABASE=laravel_repositoryDB_USERNAME=rootDB_PASSWORD=secretĐiều này sẽ khởi tạo ra một database hotline là laravel_repository. Tiếp theo bọn họ phải thêm tin tức cơ sở tài liệu vào tệp .env

Sau khi bạn đã chuyển đổi tệp .env, chúng tôi phải xóa cỗ đệm cấu hình:

php artisan config:clear

Chạy đổi khác dữ liệu

Sau khi ta sẽ set-up ngừng phần database, ta có thể ban đầu chạy phần đổi khác dữ liệu

php artisan config:clearĐiều này sẽ tạo blog với những trường tiêu đề, câu chữ và user_id mà cửa hàng chúng tôi đã khai báo trong chuyển đổi dữ liệu.

Xem thêm: Bài 1 Trang 82 Sgk Hóa 10 : Phản Ứng Oxi Hóa, Bài 1 Trang 82 Sgk Hóa Học 10

Thực hiện tại repository kiến thiết pattern

Với phần đa gì ta đang làm, bây giờ bạn có thể bắt đầu thực hiện repository kiến thiết pattern. Shop chúng tôi sẽ bắt đầu bằng phương pháp tạo thư mục Repositories trong folder App. Tiếp theo chúng ta sẽ tạo nên thư mục Interfaces. Folder này sẽ được đặt trong thư mục Repositories mà chúng ta vừa tạo.

Trong folder Interfaces, họ tạo lớp BlogReositoryInterface với hai phương thức:

Phương thức all sẽ trả về toàn bộ các blogPhương thức getByUser sẽ trả về tất cả các blog mà lại được tạo bởi một user núm thể.

Lớp sau cuối mà chúng ta sẽ sinh sản là lớp BlogRepository, lớp này sẽ thực hiện lớp BlogRepositoryInterface. Cửa hàng chúng tôi sẽ thực hiện việc nay dễ dàng nhất tất cả thể.

id)->get(); }}Thư mục Repositories của bạn nên trông như thế này:

app/└── Repositories/ ├── BlogRepository.php └── Interfaces/ └── BlogRepositoryInterface.phpBây giờ bạn đã thành công tạo repository! tiếng ta sẽ ban đầu sử dụng nó.

Sử dụng Repository

Để bắt đầu sử dụng BlogRepository, chúng ta nên gửi nó vào BlogController. Vày repository sẽ tiến hành chèn, buộc phải sẽ dễ dàng trao đổi nó cùng với một tiến hành khác. Controller sẽ trông như sau:

blogRepository = $blogRepository; } public function index() $blogs = $this->blogRepository->all(); return view("blog")->withBlogs($blogs); public function detail($id) $user = User::find($id); $blogs = $this->blogRepository->getByUser($user); return view("blog")->withBlogs($blogs); }Như bạn có thể thấy mã trong controller ngắn và vày đó hoàn toàn có thể đọc được. Các bạn không nên mười dòng mã để có được bộ dữ liệu bạn muốn, tất cả rất có thể được triển khai trong một dòng mã nhờ vào repository. Điều này cũng cực tốt cho kiểm thử solo vị, vì những phương thức của repository hoàn toàn có thể dễ dàng soát sổ qua.

Repository kiến thiết pattern cũng giúp dễ dàng thay đổi giữa các nguồn dữ liệu. Trong ví dụ này, shop chúng tôi đang áp dụng cơ sở dữ liệu để truy tìm xuất blog của mình. Bọn họ dựa vào Eloquent để triển khai điều đó cho. Tuy thế giả sử ta tra cứu thấy một blog API tuyệt vời ở đâu đó trên mạngvà công ty chúng tôi muốn thực hiện API này. Tất cả những gì chúng ta phải làm là viết lại BlogRepository để thực hiện API đó thay vì chưng Eloquent.

RepositoryServiceProvider

Thay bởi vì chèn BlogRepository vào vào BlogController, ta có thể chèn BlogRepositoryInterface và kế tiếp để Service Container quyết định repository nào sẽ được sử dụng. Điều này có thể được thực hiện trong cách tiến hành boot của AppServiceProvider, nhưng lại tôi thích tạo 1 provider bắt đầu cho việc này để giữ gần như thứ clean.

php artisan config:clearLý bởi vì ta tạo ra một provider bắt đầu cho việc này là vì mọi lắp thêm trở phải thực sự tính phức tạp khi dự án của bạn bắt đầu phát triển. Hãy tưởng tượng một dự án với hơn 10 mã sản phẩm và mỗi model đều phải có repository riêng. AppServiceProvider của các bạn sẽ trở nên không thể hiểu được.

RepositoryServiceProvider của bạn sẽ như sau:

app->bind( BlogRepositoryInterface::class, BlogRepository::class ); }}Hãy nhớ rằng việc hoán đổi BlogRepository với 1 repository không giống dễ như thế nào.

Xem thêm: Lụy Là Gì ? Biểu Hiện Của Những Kẻ Lụy Tình Thế Nào? Làm Sao Để Hết Lụy Tình

Đừng quên thêm RepositoryServiceProvider vào danh sách những provider trong tệp config/app.php. Sau đó, chúng ta phải xóa bộ đệm thông số kỹ thuật một lần nữa.

php artisan config:clearVà chúng ta đã thực hiện thành công repository design pattern. Cũng không cạnh tranh quá đúng không?

Link bài bác viết: https://itnext.io/repository-design-pattern-done-right-in-laravel-d177b5fa75d4