看法
剛學習 Repository 設計模式,搜尋社群,看到大家的討論,關於:是否使用這個模式?
我覺得這個模式就是繼 MVC 後,再次細分的一種模式,大專案用是很好的。想想一個 index.php 同時擁有路由、控制、資料庫操作。再想想接手專案,滿是 18 層 if else 的恐懼,之前寫程式碼的人,他們的技術其實都很好,就是為了快速完成老闆安排的任務,而老闆也是為了利益最大化,快速完成專案。這個只是我遇到過的一個例子,不是說每個老闆和員工都是這樣。
綜合
- 目前學習,沒有用其他支援 Repository 的庫。
- 暫時不使用介面和 services 層。
- 看這個帖子 翻譯:在 Laravel 5.8 中正確地應用 Repository 設計模式 ,是說「關於這個模式,我看到有人將它誤解為 repository 被用來建立或更新資料。 這不是 repository 應該做的,repository 不應該建立或更新資料,僅僅用於檢索資料。」,但是,其他帖子都是有 CURD 的,我目前是預設第二個。
建立資料夾
app/Repositories
新建 Repository
用 Repository 模式改造之前的專案,以 QuoteController 為例。
建立一個 QuoteRepository.php。
然後改造 QuoteController 裡的這個方法:
// app/Http/Controllers/QuoteController.php
public function quotes(): Collection
{
return Quote::all();
}
我們這邊就很簡單地寫下如下:
// app/Repositories/QuoteRepository.php
<?php
namespace App\Repositories;
use App\Models\Quote;
use Illuminate\Database\Eloquent\Collection;
class QuoteRepository
{
public function all(): Collection
{
return Quote::all();
}
}
控制器呼叫
<?php
namespace App\Http\Controllers;
// ......
use Illuminate\Database\Eloquent\Collection;
use App\Repositories\QuoteRepository;
class QuoteController extends Controller
{
// ......
private QuoteRepository $quoteRepository;
public function __construct(QuoteRepository $quoteRepository)
{
$this->quoteRepository = $quoteRepository;
}
// ......
public function quotes(): Collection
{
return $this->quoteRepository->all();
}
}
這樣就完成了簡單的使用。
參見
本作品採用《CC 協議》,轉載必須註明作者和本文連結