使用Prooph的Aggregate,DomainEvent

时间:2017-08-08 19:21:03

标签: php events aggregate domain-events prooph

我正在开发一个应用程序,它在验证后会抓取HTML Feed。这些网站仅支持电子邮件/密码身份验证,但某些集成可能需要其他信息。所以我的问题现在具体应该是在创建域事件和聚合时得到的?我曾与Prooph合作,创建了简单的聚合和域事件,只处理单个实体类型。但现在我想知道聚合和域事件是否应该针对这些第三方网站抓取工具。每个Feed抓取器应该有一个事件,还是创建一个通用事件并更好地聚合?每个聚合的属性可能不同。

class WebsiteA extends AggregateRoot
{
    private $id;

    private $email;

    private $password;

    public static function initiate($id, $email, $password)
    {...}
}

class WebsiteB extends AggregateRoot
{
    private $id;

    private $email;

    private $password;

    private $accountIds = [];

    private $userSalt;

    public static function initiate($id, $email, $password, $accountIds, $userSalt)
    {...}
}

然后类似于域事件

class WebsiteAWasInitiated extends AggregateChanged
{
    public static function withUser($id, $email, $password){}
}

class WebsiteBWasInitiated extends AggregateChanged
{
    public static function withUser($id, $email, $password, $accountIds, $userSalt){}
}

或者创建单个聚合和域事件会更好吗?这两个网站都使用。请记住,支持的网站列表将会增长。

class WebsiteScraper extends AggregateRoot
{
    private $id;

    private $credentials;

    public static function initiate($id, $credentials)
    {...}
}

class WebsiteScraperWasInitiated extends AggregateChanged
{
    public static function withUser($id, $credentials){}
}

1 个答案:

答案 0 :(得分:1)

这是一个与DDD相关的问题,答案是“它取决于”。你的刮刀数量会增长很多,你不能为它们中的每一个添加代码吗?然后尝试使用通用刮刀聚合。如果您的刮刀数量有限,您可以为每个刮刀使用自定义刮刀。