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 协议》,转载必须注明作者和本文链接
推荐文章: