我正在开发一个在通过身份验证后抓取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){}
}发布于 2017-10-13 18:52:31
这更多的是一个与DDD相关的问题,答案是“视情况而定”。你的抓取器数量会增长得如此之多,以至于你不能为它们中的每一个添加代码吗?然后尝试使用通用的scraper聚合。如果你的刮板数量有限,你可以对每个刮板使用自定义的刮板。
https://stackoverflow.com/questions/45576481
复制相似问题