imdhemy/repovel

此包已被弃用且不再维护。未建议替代包。

为 Laravel 应用实现仓储模式并添加服务层

v1.0 2019-09-08 18:15 UTC

This package is auto-updated.

Last update: 2022-02-08 23:50:57 UTC


README

Repovel 用于为服务和通过仓储添加额外的数据访问抽象层。

服务层 是一种设计模式,有助于您在需要为应用程序的不同前端使用不同的逻辑时抽象您的逻辑。实际上,当您的应用程序增长或需要更新时,您将应用程序逻辑委托给一个公共服务(服务层),并且只有一个类需要维护。这也是清理控制器并使其更易于阅读的好方法。[1]

仓储模式 自2004年首次作为领域驱动设计的组成部分引入以来,已经获得了相当多的关注。本质上,它提供了数据抽象,使您的应用程序可以与具有类似集合接口的简单抽象一起工作。这意味着,它将在您的应用程序逻辑和数据源(数据库或任何外部API)之间添加另一个层。[2],[3]

安装

从您的终端运行以下命令

composer require imdhemy/repovel

用法

Repovel 扩展了出色的 artisan 命令,添加了两个新命令 make:servicemake:repository,如下所示

服务

要创建一个服务类,请使用 make:service Artisan CLI 命令

php artisan make:service StoreBlogPost

如果您想创建一个带有所需服务的表单请求类,请添加选项 -r

php artisan make:service StoreBlogPost -r

此命令创建两个类 App\Http\Services\StoreBlogPostApp\Http\Requests\StoreBlogPostRequest

那么创建的服务是如何使用的呢?在您的控制器方法中,您可以实例化您的服务并返回其 handle() 作为响应

  • PostController.php
public function store(StoreBlogPostRequest $request)
{
    return new StoreBlogPost($request);
}

使用表单请求实例化服务类是可选的,您可以丢弃 $request 参数

$service = new StoreBlogPost;
  • StoreBlogPost.phphandle() 方法中编写您的服务逻辑
/**
 * Execute service
 *
 * @return mixed
 */
public function handle()
{
    // do some stuff
}

您可以在服务中访问 Illuminate\Foundation\Http\FormRequest 方法

$name = $this->input('name');
$validated_name = $this->validated('name');
$all_input = $this->all();

仓储

要创建一个仓储类,请使用 make:repository Artisan CLI 命令

php artisan make:repository PostRepository

创建的类位于 app\Http\Repositories 中,请前往并添加您需要的方法以检索数据。

注意 我发现通过接口实现仓储标准或强制某些仓储方法(如(all, get, find 等))将限制创建的仓储的使用。这是由您决定的。

完整示例

<?php

namespace App\Http\Services;

use Imdhemy\Repovel\Contracts\AbstractService as Service;
use App\Repositories\DummyRepository;

class DummyClass extends Service
{
    /**
     * Execute service
     *
     * @return mixed
     */
    public function handle()
    {
        $repository = new DummyRepository();
        $dummies = $repository->all();
        return $dummies;
    }
}

配置

配置文件 repovel.php 允许您更改服务和存储库的默认命名空间。要发布配置文件,请运行以下 Artisan CLI 命令

php artisan vendor:publish --tag=repovel-configs

这会将 [/imdhemy/repovel/src/config/repovel.php] 复制到 [/config/repovel.php],在那里您可以编辑默认配置

return [
    /**
     * ---------------------------------------------------
     * Services configuration
     * ---------------------------------------------------
     *
     */
    'services'  => [
        'namespace' => '\Http\Services' // Default namespace for the services
    ],

     /**
     * ---------------------------------------------------
     * Repositories configuration
     * ---------------------------------------------------
     *
     */
    'repositories' => [
        'namespace' => '\Repositories' // Default namespace for the repositories
    ]
];

许可证

本仓库的内容是在 MIT 许可证下发布的。