gpslab/payload

用于创建有效负载消息的简单基础设施组件

v1.1.0 2017-07-11 09:59 UTC

This package is auto-updated.

Last update: 2024-08-29 04:31:23 UTC


README

Latest Stable Version Total Downloads Build Status Coverage Status Scrutinizer Code Quality SensioLabs Insight StyleCI License

用于创建有效负载消息的简单基础设施组件

安装

使用 Composer 非常简单,运行

composer require gpslab/payload

用法

此库自动用有效负载数据填充对象的属性。

例如,创建一个简单的消息

class SimpleMessage extends PayloadMessage
{
    public $id = 0;

    public $name = '';
}

填充消息

$message = new SimpleMessage([
    'id' => 123,
    'name' => 'foo',
]);

$message->id; // 123
$message->name; // foo
$message->payload(); // ['id' => 123, 'name' => 'foo']

注意

在有效负载中指定的所有字段都必须存在。

受保护属性

您可以使用受保护属性来存储数据。将属性设置为只读非常方便。

class SimpleMessage extends PayloadMessage
{
    protected $id = 0;

    protected $name = '';

    public function id()
    {
        return $this->id;
    }

    public function name()
    {
        return $this->name;
    }
}

填充消息

$message = new SimpleMessage([
    'id' => 123,
    'name' => 'foo',
]);

$message->id(); // 123
$message->name(); // foo
$message->payload(); // ['id' => 123, 'name' => 'foo']

注意

要填充私有属性,您必须使用设置器。

属性设置器

您可以将属性标记为私有并使用设置器来填充它。这将确保数据的安全并控制其类型。您可以将设置器标记为受保护的,以防止从外部更改类。

class SimpleMessage extends PayloadMessage
{
    private $id = 0;

    private $name = '';

    public function id(): integer
    {
        return $this->id;
    }

    protected function setId(integer $id)
    {
        $this->id = $id;
    }

    public function name(): string
    {
        return $this->name;
    }

    protected function setName(string $name)
    {
        $this->name = $name;
    }
}

填充消息

$message = new SimpleMessage([
    'id' => 123,
    'name' => 'foo',
]);

$message->id(); // 123
$message->name(); // foo
$message->payload(); // ['id' => 123, 'name' => 'foo']

CQRS

您可以在 CQRS 基础设施中使用有效负载。

重命名联系人的命令

class RenameContactCommand extends PayloadCommand
{
    public $contact_id = 0;

    public $new_name = '';
}

通过身份获取联系人的查询

class ContactByIdentityQuery extends PayloadQuery
{
    public $id = 0;
}

领域事件

您可以在 领域事件 中使用有效负载。

事件,联系人已被重命名

class RenamedContactEvent extends PayloadDomainEvent
{
    public $contact_id = 0;

    public $old_name = '';

    public $new_name = '';
}

序列化

您可以使用 Symfony 序列化器 组件来序列化消息。为此,您可以使用 PayloadNormalizerTypedPayloadNormalizer,并将结果编码为 JSON、XML、YAML、CSV 等。

  • PayloadNormalizer - 只能用于一个类,因为它不区分消息;
  • TypedPayloadNormalizer - 在标准化数据中添加了从 MessageTypeResolver 服务接收到的消息类型。

您可以使用 ClassNameMessageTypeResolver 作为简化解析器。它使用类名的最后一部分作为消息类型。

  • \Acme\Demo\SomeMessage 转换为 SomeMessage
  • \Acme_Demo_SomeMessage 转换为 SomeMessage

小心使用此解析器,并确保在不同命名空间中不要命名消息类相同。

许可证

此软件包受 MIT 许可证 的约束。请参阅文件 LICENSE 中的完整许可证。