irfan-chowdhury/repository-maker

此包将为仓库设计模式环境生成必要的文件。

v1.2.0 2023-08-27 16:02 UTC

This package is auto-updated.

Last update: 2024-09-27 18:19:43 UTC


README

Laravel 仓库生成器

关于仓库设计模式

仓库设计模式是一种软件设计原则,常用于开发与数据存储系统(如数据库)交互的应用程序。它提供了一个抽象层,在应用程序的数据访问逻辑和底层数据存储之间,促进代码库中关注点的分离和模块化。

简而言之,仓库设计模式涉及创建称为仓库的类或接口,这些仓库封装了与数据存储交互的方法和操作。这些仓库抽象出数据检索、存储和处理的具体细节,使得应用程序的代码库更易于维护和测试。此模式还有助于集中数据访问逻辑,提高代码的可重用性,并便于管理复杂的查询。

要求

    "require": {
        "php": ">=7.4",
        "laravel/framework": ">=8.0"
    }

安装

您可以通过 composer 安装此包

composer require irfan-chowdhury/repository-maker

设置

安装后,转到 config/app.php 并在 "providers" 数组中粘贴以下行

'providers' => [
    /*
    * Package Service Providers...
    */
    Irfan\RepositoryMaker\RepositoryServiceProvider::class,
]

用法

如果您现在运行 php artisan,您将在列表中看到一些新命令

  • make:contract
  • make:contract-base
  • make:contract-extends
  • make:repository
  • make:repository-i
  • make:repository-base
  • make:repository-extends
  • make:service
  • make:repository-i-s

命令

$ php artisan make:contract NameContract
$ php artisan make:contract-base
$ php artisan make:contract-extends NameContract
$ php artisan make:repository NameRepository
$ php artisan make:repository-i NameRepository
$ php artisan make:repository-base
$ php artisan make:repository-extends NameRepository
$ php artisan make:service NameService
$ php artisan make:repository-i-s NameRepository

注意

  • 在使用仓库之前,您必须确保您的模型类是否存在。
  • 您必须在 AppServiceProviderregister() 方法中注册依赖项。如果您愿意,可以创建一个自定义服务提供程序。以下是以下代码的示例 -
use App\Contracts\NameContract;
use App\Repositories\NameRepository;

...

public function register(): void
{
    $this->app->bind(NameContract::class, NameRepository::class);
}

示例

假设您有一个用户模型,其命名空间为 App\Models\User.php

创建接口

它将根据此路径 app/Contracts/UserContract.php 生成一个接口。在这里,我们将其命名为 Contract。

$ php artisan make:contract UserContract

创建基本接口

这是可选的,但如果您想使用基本接口,它将根据此路径 app/Contracts/BaseContract.php 生成一个接口。在这里,我们将其命名为 Contract。

$ php artisan make:contract-base

创建扩展基本接口的接口

如果您想扩展基本接口,它将根据此路径 app/Contracts/UserContract.php 生成一个接口,并扩展为 BaseContract

$ php artisan make:contract-extends UserContract

注意:但在使用扩展基本接口之前,您必须先创建 BaseContract(使用 make:contract-base)。

创建仓库

它将根据此路径 app/Repositories/UserRepository.php 生成一个仓库类。

$ php artisan make:repository UserRepository

创建带有接口的仓库

它将根据此路径 app/Repositories/UserRepository.phpapp/Contracts/UserContract.php 生成一个带有接口的仓库类。

$ php artisan make:repository-i UserRepository

创建基本仓库

这是可选的,但如果您想使用基本仓库,它将根据此路径 app/Repositories/BaseRepository.php 生成一个仓库类。

$ php artisan make:repository-base

创建扩展基本仓库的仓库

如果您想扩展基本仓库,它将根据此路径 app/Repositories/UserRepository.php 生成一个仓库类,并扩展为 BaseRepository

$ php artisan make:repository-extends UserRepository

注意:但在使用扩展基本仓库之前,您必须先创建 BaseRepository 类(使用 make:repository-base)。

创建服务类

这是可选的,但有时我们需要使用服务类来维护业务逻辑。如果您想使用服务类,它将根据此路径生成服务类 app/Services/UserService.php

$ php artisan make:service UserService

创建具有接口和服务的存储库

它将根据此路径生成具有接口和服务的存储库类 app/Repositories/UserRepository.phpapp/Contracts/UserContract.phpapp/Services/UserService.php

$ php artisan make:repository-i-s UserRepository

然后您需要在服务提供者中注册
use App\Contracts\UserContract;
use App\Repositories\UserRepository;

...

public function register(): void
{
    $this->app->bind(UserContract::class, UserRepository::class);
}

在控制器/服务类中注入

在您的控制器中,您可以使用它们,

use App\Contracts\UserContract;
...

public function __construct(public UserContract $userContract){}

public function index()
{
    return $userContract->latest()->first();
}

访问

Packagist : https://packagist.org.cn/packages/irfan-chowdhury/repository-maker

致谢