判斷是否是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 協議》,轉載必須註明作者和本文連結