我目前正在开展侧面项目以了解DDD,我想知道什么是存储库-theh组件来获取我的值对象。
在我的市场有界环境中,目录由商家管理,并包含按类别和Universe组织的优惠
在这里,我的猜测是Merchant,Catalog和Universe将是Aggregate Roots,因为它们在系统中具有全局标识,而Offer将是Catalog Aggregate的实体,而Category将是一个Value Object,就像提供的标签一样
然后我会让Repositories充当AR持久性的外观,但我不知道如何对DDD构建块,我要处理类别的检索(商家应该能够定义他的目录中的类别,然后用它们来标记他添加的商品。)
有人可以提供一些指导吗?
谢谢
答案 0 :(得分:1)
正如您所指出的,值对象不是实体,因此不应直接从存储库中检索。然而,它们是实体的方面/属性。
当您希望引用Categories
的所有Catalog
时,您原则上是对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#中的示例代码,但它背后的想法应该有效,并允许您列出目录中存在的商品的所有类别。