Repository 設計模式上手體驗

小李世界發表於2021-11-12

看法

剛學習 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 協議》,轉載必須註明作者和本文連結
無論在現實或是網路中,我都是孤獨的。

相關文章