菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
3205
3

repository 模式的小解

原创
05/13 14:22
阅读数 1928

判断是否是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挺多人把他叫做数据仓库之类的 (确实也是仓库)
我把他叫做"代理" 就是增删改查通过这个"代理",
改需求的时候,改"代理",而不需要一个个文件的去修改。

发表评论

0/200
3205 点赞
3 评论
收藏
为你推荐 换一批