slick / cqrs-tools
Slick/CQRS 是一个用于事件溯源风格应用的实用库。它包含一系列工具,可以加速领域驱动开发(DDD)和CQRS开发。
Requires
- php: >=7.1
- ext-json: *
- league/event: ^2.2@dev
- ramsey/uuid: 3.x-dev
Requires (Dev)
- phpspec/phpspec: ^3.4
- squizlabs/php_codesniffer: ^3.0@dev
This package is auto-updated.
Last update: 2024-09-19 04:44:51 UTC
README
Slick/CQRSTools
是一个用于事件溯源风格应用的实用库。它包含一系列工具,可以加速使用领域驱动开发(DDD)和CQRS技术进行开发。
此包符合PSR-2代码标准和PSR-4自动加载标准。它还遵循 语义版本2.0.0 规范。
安装
通过 Composer
$ composer require slick/cqrs-tools
使用方法
创建事件
事件是一种简单且描述性的记录某些操作的方式。它们通常包含一些元数据和用于更改领域值的值。考虑创建用户的事件
<?php use Ramsey\Uuid\Uuid; use Slick\CQRSTools\Event\AbstractEvent; use Slick\CQRSTools\Event; class UserWasCreated extends AbstractEvent implements Event { /** @var Uuid */ private $userId; /** @var string */ private $name; public function __construct(Uuid $userId, string $name) { parent::__construct(); $this->userId = $userId; $this->name = $name; } public function jsonSerialize() { return [ 'userId' => $this->userId, 'name' => $this->name ]; } public function unserializeEvent($data): void { $this->userId = Uuid::fromString($data->userId); $this->name = $data->name; } }
上述类定义了一个 UserWasCreated
事件,并封装了创建用户的ID和名称。还有3个其他字段,考虑元数据,对于每个扩展 AbstractEvent
抽象类的事件: EventId
、Author
和 OccurredOn
,分别持有唯一的标识ID、可选的作者(用户、服务等)ID以及事件发生的日期和时间。请注意,您需要实现 jsonSerialize()
和 unserializeEvent()
方法。这些方法用于将事件发布到其他服务(如数据库或消息队列),以及从这些服务反序列化事件。元数据字段会自动序列化和反序列化,您不需要在那些方法中包含它们。
使用生成器记录事件
您的领域中的所有更改都应生成一个事件。因此,实现此功能的一种简单方法是将此类行为添加到您的领域对象中。考虑以下 User
对象
<?php use Ramsey\Uuid\Uuid; final class User { /** @var Uuid */ private $userId; /** @var string */ private $name; public function __construct(string $name) { $this->name = $name; $this->userId = Uuid::uuid4(); } public function userId(): Uuid { return $this->userId; } public function name(): string { return $this->name; } }
这是一个非常简单的领域 User
实现示例。让我们假设每次创建用户时都应该创建一个 UserWasCreated
事件
<?php use Ramsey\Uuid\Uuid; use Slick\CQRSTools\Event\EventGenerator; use Slick\CQRSTools\Event\EventGeneratorMethods; final class User implements EventGenerator { // ... other code use EventGeneratorMethods; public function __construct(string $name) { $this->name = $name; $this->userId = Uuid::uuid4(); // Create the event $this->recordThat(new UserWasCreated($this->userId, $name)); } }
// 工作进行中...
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG。
测试
$ composer test
贡献
有关详细信息,请参阅 CONTRIBUTING 和 CODE_OF_CONDUCT。
安全性
如果您发现任何安全问题,请通过电子邮件 slick.framework@gmail.com 而不是使用问题跟踪器。
致谢
许可
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件。