repository 模式的小解

判断是否是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 协议》,转载必须注明作者和本文链接
专心学习不瞎搞
讨论数量: 2
tangq

不错,不过代码变量写错了。

4年前 评论
朕略显ぼうっと萌

你这个仓库模型不是很对吧,这个例子还不如在model层实现,$user-> updateVip(true) 不是更好?

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
87
粉丝
105
喜欢
480
收藏
717
排名:109
访问:8.7 万
私信
所有博文
社区赞助商