Repository 层的代码你们有用来创建或更新数据吗,还是只用来创建数据
看了一下手册,借鉴了一下,结果后来把更新用户的乐观锁也给放在里面了,但是有一种说法,Repository用适合用来获取数据。
另外Service层和这个Repository有什么区别
<?php
namespace App\Repositories;
use Illuminate\Http\Request;
use App\Models\User;
use App\Exceptions\InvalidRequestException;
class UserRepository
{
private $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function getActive($phone)
{
return $this->user->where('phone', $phone)->where('status', 1)->firstOrFail();
}
public function updateBalance(User $user, $balance) {
$isUpdated = $this->user->where('id', $user->id)->where('version', $user->version)->update(['balance' => $balance, 'version' => $user->version + 1]);
if(!$isUpdated) {
throw new InvalidRequestException("充值失败");
}
}
}
我从来不用这一层。
Java里有这种写法
controller 接收请求,转发给服务层做处理,等待服务层返回数据或抛出异常后将其返回
service 业务处理,接受控制器转发参数后对业务进行处理,数据验证(laravel自带),业务逻辑判断,数据处理(dao),所以这里这是各种 if 判断,取数据,组装数据
repository 数据查询,包括数据列表,业务逻辑数据查询,如果只是单纯的页面列表可以只用通过 controller 调用
dao 数据处理,很少人用,单条数据查询,数据增、改都通过它
model 只是数据表模型
个人习惯,service用来放第三方服务了,不习惯用tool之类的,repository我用来处理复杂的模型逻辑了,controller做转发,
目前的是 Repository 只用来查询,在考虑要不要把增删改拿过来,让 Service 层更加容易被测试。
Service 用于业务处理、写入数据库等,且一个 Service 原则上只做一件事,比如 登录、注册,分别创建 LoginService、RegisterService,而不是挤在一起用 UserService,这样后面 UserService 就会变的很大。这种情况下,如果跟 User 相关的太多,那就再创建一个 User 目录,把这些 Service 放进去,而不是揉到一起。
我基本是 controller model service exception validator 这几个 repository没用过