0

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

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){}
}
4

1 回答 1

1

这更像是一个与 DDD 相关的问题,答案是“视情况而定”。您的爬虫数量是否会增长得如此之多,以至于您无法为每个爬虫添加代码?然后尝试使用通用刮板聚合。如果您的刮板数量有限,您可以为每个刮板使用自定义刮板。

于 2017-10-13T10:52:30.870 回答