判断是否是vip

不好的写法

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

好的写法

1
2
3
4
5
6
7
8
9
10
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 App\Repository\userRepository;
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挺多人把他叫做数据仓库之类的 (确实也是仓库)
我把他叫做"代理" 就是增删改查通过这个"代理",
改需求的时候,改"代理",而不需要一个个文件的去修改。