irfan-chowdhury / repository-maker
此包将为仓库设计模式环境生成必要的文件。
Requires
- php: >=7.4
- laravel/framework: >=8.0
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
注意
- 在使用仓库之前,您必须确保您的模型类是否存在。
- 您必须在
AppServiceProvider
的register()
方法中注册依赖项。如果您愿意,可以创建一个自定义服务提供程序。以下是以下代码的示例 -
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.php
和 app/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.php
,app/Contracts/UserContract.php
,app/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
致谢
- 灵感来自 Abdullah Al Zuhair
- 资源 - Bitfumes 和 Maniruzzaman Akash
- 结构遵循 - spatie/package-skeleton-laravel