repository 模式的小解

lyxxxh發表於2019-07-22

判斷是否是vip

不好的寫法

$user = User::find(1);
if( $user->is_vip)
  echo 'vip';

好的寫法

function isVip($user)
{
    if($user->is_vip)
      return true;
      return false;
}

$user = User::find(1);
if( isVip($user))
  echo 'vip';
現在需要增加一個需求,vip有截至時間,第一種寫法將會修改到一堆程式碼。
可以看到,我們判斷vip是經過isVip()來代理的
我覺得repository的核心就是這個"代理"

簡單的Repository

 App\Repository;
class userRepository
{

    public function updateVip($user_id,$status = 1)
    {
        User::Where(id,$user_id)->Update(['is_vip' => $status]);
    }

}

class UserController
{

    protected $repository
    function __construct(App\Repository\userRepository $repository)
    {
       $this->repository = repository;
    }

    public function save()
    {
      //把1號使用者修改為vip 
      $this->repository->updateVip(1);
    }

}
挺麻煩的,用模型一行程式碼搞定,用Repository那麼多程式碼。
現在需求給使用者修改為vip的時候 要加一年的vip時間。

假設你用模型修改  多個控制器(贈送vip 後臺修改 支付成功 其他等等功能)都有
User::Where(id,$user_id)->Update(['is_vip' => $status]);
每個控制都去修改挺麻煩的,如果是Repository,只要改updateVip()就好了。

專案小,只有支付成功後修改為vip。 那麼,用Repository是----------------為什麼要用?
(不過isVip()這種方法還是要封裝的)  

結語

Repository挺多人把他叫做資料倉儲之類的 (確實也是倉庫)
我把他叫做"代理" 就是增刪改查透過這個"代理",
改需求的時候,改"代理",而不需要一個個檔案的去修改。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
專心學習不瞎搞

相關文章