imdhemy / repovel
为 Laravel 应用实现仓储模式并添加服务层
Requires
- illuminate/support: ^6.0
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:service
和 make:repository
,如下所示
服务
要创建一个服务类,请使用 make:service
Artisan CLI 命令
php artisan make:service StoreBlogPost
如果您想创建一个带有所需服务的表单请求类,请添加选项 -r
php artisan make:service StoreBlogPost -r
此命令创建两个类 App\Http\Services\StoreBlogPost
和 App\Http\Requests\StoreBlogPostRequest
那么创建的服务是如何使用的呢?在您的控制器方法中,您可以实例化您的服务并返回其 handle()
作为响应
PostController.php
public function store(StoreBlogPostRequest $request) { return new StoreBlogPost($request); }
使用表单请求实例化服务类是可选的,您可以丢弃 $request
参数
$service = new StoreBlogPost;
StoreBlogPost.php
在handle()
方法中编写您的服务逻辑
/** * 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 许可证下发布的。