php - 当服务类可以做同样的事情时,存储库的目的是什么?

标签 php laravel laravel-5.2 repository-pattern

通常我会在不使用存储库的情况下将逻辑放在服务类中,例如,如下所示:

namespace App\ProjectName\Profile;

use App\User;

class AccountService
{
    private $userModel;

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

    public function detail()
    {
        $user = \Auth::User();

        return [
            'id'    => $user->id,
            'name'  => $user->name,
            'email' => $user->email,
            'keys'  => $user->keys,
        ];
    }

    public function addKey($name, $key)
    {
        return $this->userModel->keys()->create([
            'name' => $name,
            'key'  => $key
        ]);
    }
}

我在那里看到了一些示例,通过创建存储库类进一步重构。 UserController 输入数据,将其发送到 UserCreatorService,后者获取 UserRepository,后者又获取 UserModel。看起来 UserCreatorServiceUserRepository 的重复?

最佳答案

您的问题没有明确的答案,因为您使用的模式在很大程度上取决于项目的复杂性和需求。

但是,服务和存储库是两个不同的事物。存储库是模型的通用包装器,是您将查询写入数据库的地方。 IMO 你不应该在这里添加逻辑,存储库的唯一目的是将 os 存储数据抓取到数据库中。 Repositories 的优势在于可以“轻松”切换到其他数据库系统。

服务,IMO,是您添加所有应用程序逻辑的地方。

有关更多信息,请参阅 this answer .

关于php - 当服务类可以做同样的事情时,存储库的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39945840/

相关文章:

php - 检查 PHP 中的值是否为整数

php - MySQL 插入并进行多重检查

php - 如何在laravel builder中实现递归查询

php - Laravel - 在不强制下载的情况下显示存储中的 PDF 文件?

php - 使用时间戳获取过去 30 天的记录

php - Mysql:查询无法正常工作,未选择 12:00 之间的时间

php - Laravel 5.2 : Do something after user has logged in?

php - 山魈进入 Laravel 不工作

php - Laravel 5.2 登录不起作用,没有重定向也没有错误

php - 调用未定义的函数 Mpdf\mb_regex_encoding()