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("充值失败");
        }
    }
}
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9

我从来不用这一层。

1年前 评论

controller 接收请求,转发给服务层做处理,等待服务层返回数据或抛出异常后将其返回

service 业务处理,接受控制器转发参数后对业务进行处理,数据验证(laravel自带),业务逻辑判断,数据处理(dao),所以这里这是各种 if 判断,取数据,组装数据

repository 数据查询,包括数据列表,业务逻辑数据查询,如果只是单纯的页面列表可以只用通过 controller 调用

dao 数据处理,很少人用,单条数据查询,数据增、改都通过它

model 只是数据表模型

1年前 评论

目前的是 Repository 只用来查询,在考虑要不要把增删改拿过来,让 Service 层更加容易被测试。

Service 用于业务处理、写入数据库等,且一个 Service 原则上只做一件事,比如 登录、注册,分别创建 LoginService、RegisterService,而不是挤在一起用 UserService,这样后面 UserService 就会变的很大。这种情况下,如果跟 User 相关的太多,那就再创建一个 User 目录,把这些 Service 放进去,而不是揉到一起。

1年前 评论
深蓝色 (楼主) 1年前

Java里有这种写法

1年前 评论

个人习惯,service用来放第三方服务了,不习惯用tool之类的,repository我用来处理复杂的模型逻辑了,controller做转发,

1年前 评论
<?php

namespace App\Services;

use Illuminate\Http\Request;
use App\Models\User;
use App\Exceptions\InvalidRequestException;

class UserService
{
    private $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    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("充值失败");
        }
    }
}
1年前 评论

file 创建了一个Sms用来发送短信,引用的是easysms 之所以创建Sms目录是因为需要存储RegisterMessage,后面还会有找回密码啥的 然后SmsService这个是用来发送的,因为我配置文件需要从数据库中调用,放在config里面读不到 但感觉这样设计有点奇怪

1年前 评论

我基本是 controller model service exception validator 这几个 repository没用过

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!