smoothphp/querybus

简单的查询总线

v1.0.2 2017-11-16 17:15 UTC

This package is auto-updated.

Last update: 2024-09-12 04:43:22 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

安装

通过 Composer

$ composer require smoothphp/querybus

用法

查询总线用于在应用域内执行查询。通常这些是只读命令,写入操作使用 命令总线 来执行。

查询总线是一个简单的概念,将大部分实现决策留给开发者。为 Laravel 用户提供了一个简单的实现。

查询总线由 3 个组件组成。

  • 查询
    包含查询意图和参数的数据传输对象(DTO)。
  • 查询总线
    接收一个查询对象,解析查询处理器,并执行它。
  • 查询翻译器
    接收一个查询,并将其转换为查询处理器类的名称。

Laravel 用户

Laravel 查询总线接收一个查询对象,并通过在类名后添加 'Handler' 来解析处理器。然后通过容器解析这个处理器类,并注入所有依赖项。

例如,App\Queries\FindUserById 被解析为 App\Queries\FindUserByIdHandler,然后执行 handle 方法。
不过,您可以自由地以任何方式实现查询处理器解析。

服务提供者

<?php

return [
    // ...
    
    'providers' => [
        // ...
        SmoothPhp\QueryBus\Laravel\LaravelQueryBusServiceProvider::class,
    ],
];

查询

<?php

class FindUserById {
    public $id;
    public function __construct(string $id) {
        $this->id = $id;
    }
}

查询处理器

<?php

class FindUserByIdHandler {
    private $client;
    
    public function __construct(DBClient $client) {
        $this->client = $client;
    }
    
    public function handle(FindUserById $query) {
        return $this->client->table('users')->where('id', $query->id)->get();
    }
}

使用

<?php

class ExampleController extends Controller {
    private $bus;
    
    public function __construct(\SmoothPhp\QueryBus\QueryBus $queryBus) {
        $this->bus = $queryBus;
    }
    
    public function showUser(string $userId) {
        return view('users.show')->with('user', $this->bus->query(new FindUserById($userId)));
    }
}

变更日志

请参阅 变更日志 了解最近的变化。

测试

$ composer test

贡献

请参阅 贡献指南行为准则 了解详细信息。

安全性

如果您发现任何安全相关的问题,请通过电子邮件 simon@smoothphp.com 而不是使用问题跟踪器。

致谢

许可证

MIT 许可证(MIT)。请参阅 许可证文件 了解更多信息。