可借用的汇总库


README

Latest Stable Version License

支持在事件源系统中汇总交互的领域和基础设施的库。

这不会帮助您构建领域。相反,它为基础设施层提供接口和基本功能,以便与您的汇总类进行交互,而无需它们实现特定于库的接口。

安装

您可以通过Composer安装此库。

composer require lendable/aggregate

需求

  • PHP >= 8.2

功能

AggregateIdExtractor

定义从领域汇总对象中提取 AggregateId 的契约。您的汇总类不应持有 AggregateId 实例,而应使用特定于领域的标识类型(例如,UserId)。

AggregateTypeResolver

定义从领域汇总对象中解析 AggregateType 的契约。AggregateType 是汇总的分类。这是一个基础设施问题,旨在与 AggregateId 一起进行审计日志记录,以及单架构/多汇总存储模式。

AggregateVersionExtractor

定义从领域汇总对象中提取 AggregateVersion 的契约。这是一个事件源基础设施概念,其中(通常)版本随着对汇总状态有影响的每个事件的增加而增加。

测试支持

提供了 AggregateIdExtractorSpecAggregateTypeResolverSpecAggregateVersionExtractorSpec 以简化您实现测试。只需扩展这些类以用于您自己的测试套件,并实现钩子点。

use Lendable\Aggregate\Testing\AggregateIdExtractorSpec;
use Lendable\Aggregate\AggregateIdExtractor;
use Lendable\Aggregate\AggregateId;

final class FooIdExtractor extends AggregateIdExtractorSpec 
{
    protected function createExtractor(): AggregateIdExtractor
    {
        return new FooIdExtractor();
    }
    
    protected function createExpectedAggregateId(): AggregateId
    {
        return AggregateId::fromString('1406fd13-29d3-44e3-812c-c1cd14e12b38');
    }
    
    protected function createAggregateWithExpectedAggregateId(): object
    {
        return Foo::register(FooId::fromString('1406fd13-29d3-44e3-812c-c1cd14e12b38'));
    }
}