4

我目前正在研究发布有界上下文。这方面的主要参与者是ProductListing

产品:可以在多个市场上市。一上市

列表:可以有很多产品,因为一些市场支持变体列表。一上市产品

基于以上内容,我在ListingProduct之间建立了多对多的关系。

我为两者创建了一个聚合。包含列表的产品聚合和包含产品的列表聚合。

在两个聚合中定义列表是否可以接受,或者我应该定义一次列表以在​​两个聚合中使用?

第一个列表将在产品聚合中,因为产品 AR 具有在创建列表时强制执行规则的工厂方法(例如避免在同一市场中重复列表并确保我们有用于列表的库存数量)

第二个列表将是一个聚合根,它可以包含发布时需要的许多产品的信息。通过这种方式,我可以在列表上创建方法以将其映射到不同市场(例如 Ebay 和亚马逊)提供的模式定义。此外,我希望能够独立于同一产品中的列表保留列表。

这两个聚合是否与重复定义有太多重叠?这是在一个有限的上下文中预期的吗?

另外,我怎样才能保持列表的重复表示彼此同步?

4

1 回答 1

1

第一个列表将在产品聚合中,因为产品 AR 具有在创建列表时强制执行规则的工厂方法(例如避免在同一市场中重复列表并确保我们有用于列表的库存数量)

产品是否应该知道自己的库存、自己的市场、自己的列表并创建列表?这对一个实体来说责任太大了!我建议让ListingFactory 使用其他服务或保存此信息的存储库检查库存和市场。

在两个聚合中定义列表是否可以接受,或者我应该定义一次列表以在​​两个聚合中使用?另外,我怎样才能保持列表的重复表示彼此同步?

通过维护单个列表来避免产品和列表之间的循环依赖和混乱(查看这个问题以了解类似的纠结:如何设计删除时的多对多关系?)。在我看来,您应该拥有一个包含您的列表的市场集合。如果您需要访问基于产品的所有列表(例如在我建议的 ListingFactory 中),您可以设置一个市场服务或存储库来获取所有列表。

这两个聚合是否与重复定义有太多重叠?

你对产品“可以在多个市场上架”的定义并不是一个非常令人满意的定义,因为在阅读了这个定义之后,问题仍然存在:那什么是可以上架的?在其核心,可以在不了解列表的情况下定义产品,但在这种情况下,明确命名关系可能仍然会更好。由于(产品)列表不能没有产品来定义,但是产品可以没有列表来定义。它们不必是重复的。我希望您的产品完全不知道列表,但与上下文中的列表相关。

这是在一个有限的上下文中预期的吗?

所有定义都建立在彼此的基础上,因此在任何上下文中,您都可以预期重叠、重复、同义词、扩展、近似相似、交叉引用、不同类型的关系等。它需要相当多的调查意识才能将主要与次要的,谓词从主宾,核从膜。然而,这也是让它如此有趣的原因:)

词的定义:“语音或写作的一个独特的有意义的元素,与其他人(或有时单独)一起使用以形成一个句子......”

句子的定义:“一组本身是完整的词,通常包含主语和谓语,传达一个陈述、问题、感叹......”

于 2013-08-17T17:01:27.683 回答