2017-08-08 25 views
0

我正在开发一个应用程序,该应用程序在验证之后擦除HTML提要。这些网站仅支持电子邮件/密码身份验证,但某些集成可能需要其他信息。所以我的问题现在具体应该在创建域事件和聚合时获得?我与Prooph合作过,并创建了仅处理单个实体类型的简单聚合和域事件。但现在我想知道聚合和域名事件是否应该专门针对这些第三方网站刮板。是否应该为每个feed scraper提供一个事件,或者创建一个通用事件并更好地聚合?每个聚合的属性可能不同。Aggophate,具有Prooph的DomainEvent

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

回答

0

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