我目前正在做一个副业项目,以获得DDD的感觉,我想知道从存储库中获取值对象的组件是什么。
在我的市场限定上下文中,目录由商家管理,并包含按类别和范围组织的优惠
在这里,我的猜测是商人、目录和宇宙将是聚合根,因为它们在系统中具有全局身份,而报价将是目录聚合的实体,类别将是一个价值对象,就像报价上的标签一样。
然后我将有存储库作为ar持久性的门面,但是我不知道如何,关于DDD构建块,我要处理类别的检索(商家应该能够在他的目录中定义类别,然后使用它们来标记他添加到其中的报价)。
有谁能指点一下吗?
Thank you
正如您所指出的,值对象不是实体,因此不应该直接从存储库中检索。然而,它们是实体的方面/属性。
当您希望引用Catalog
中的所有Categories
时,原则上,您将对Catalog
执行查询;你含有哪种Categories
?
由于Categories
和Catalog
都是聚合根,您可能需要使用域服务(它们的存在是为了执行跨聚合操作,以及其他事情)。
这可能导致以下代码:
class CategoryListingService
{
public ICollection<Category> GetCategoriesForCatalog(Catalog catalog)
{
var offers = offerRepository.GetAllOffersFrom(catalog)
var categories = offers.Select(o => o.Category).Distinct();
return categories;
}
}
请注意,这是c#的示例代码,但其背后的思想应该是可行的,并允许您列出目录中存在的所有类别的报价