我正在开发一个应用程序,该应用程序在身份验证后抓取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){}
}
这更像是一个与 DDD 相关的问题,答案是"视情况而定"。您的抓取器数量会增长如此之多,以至于您无法为每一个抓取器添加代码吗?然后尝试使用通用抓取器聚合。如果您的刮刀数量有限,您可以为每个刮刀使用自定义刮刀。