总根ID

问题描述 投票:0回答:1

我正在为项目使用CQRS / Event Sourcing,它主要用于学习和发现新事物。

而且我对聚合根ID有点困惑。不是关于它们如何工作,而是如何正确编写它们。所以让我解释一下:

对于每个聚合根,我都有一个ID,此ID由ramsey / uuid库生成。我创建了一个名为Uuid的自定义Value Object,它包装了uuid的所有逻辑。这是关于它的一些代码:

use Ramsey\Uuid\Uuid as BaseUuid;

/**
 * @var StringValueObject
 */
private $value;

/**
 * Uuid constructor.
 *
 * @param null|string $value
 *
 * @throws Exception
 */
protected function __construct(?string $value = null)
{
    $uuid_str = BaseUuid::uuid4();

    if (null !== $value) {
        $pattern = '/' . BaseUuid::VALID_PATTERN . '/';

        if (!\preg_match($pattern, $value)) {
            throw new InvalidNativeArgumentException($value, array('Uuid string'));
        }

        $uuid_str = $value;
    }

    $this->value = StringValueObject::fromNative(\strval($uuid_str));
}

现在,我担心的是,当我创建聚合根时,我自然需要选择ID的类型,有2种选择:

  1. Uuid的类型(上面的值对象)
  2. 继承自Uuid值对象的新值对象(UserId,PropertyId等)。

目前,我使用第一种解决方案,但我认为第二种更好,主要是针对通用语言,UserID,PropertyId比Uuid更有意义。

而且,当用户请求资源时,在URL中公开uuid是一件好事,还有另一种方法吗?我是否应该在聚合根目录中创建另一个字段,一种可以在URL中公开以访问给定资源的ID?

谢谢

php domain-driven-design symfony4 cqrs event-sourcing
1个回答
0
投票

好问题,Thibssss13。关于AGID(汇总根ID),需要牢记一些注意事项。

首先,它们通常是实现细节。实际的必要性,它们不一定适合UL。但是,如果这样做的话,显然会更好,但它需要业务,而不是开发人员。

关于选择哪种方法来生成UUID。我认为这无关紧要。只要简单快捷即可-只要它是独一无二的!

最重要的提示-在实例化或新建AG之前创建AGID。最好尽可能靠近客户。这样,您就知道在阅读方面要注意什么。

有关它通常如何组合在一起的合理概述,请查看A CQRS Step-By-Step Overview

© www.soinside.com 2019 - 2024. All rights reserved.