DDD中的值对象来自何处?

时间:2015-05-20 20:34:35

标签: domain-driven-design value-objects

我目前正在开展侧面项目以了解DDD,我想知道什么是存储库-theh组件来获取我的值对象。

在我的市场有界环境中,目录由商家管理,并包含按类别和Universe组织的优惠

在这里,我的猜测是Merchant,Catalog和Universe将是Aggregate Roots,因为它们在系统中具有全局标识,而Offer将是Catalog Aggregate的实体,而Category将是一个Value Object,就像提供的标签一样

然后我会让Repositories充当AR持久性的外观,但我不知道如何对DDD构建块,我要处理类别的检索(商家应该能够定义他的目录中的类别,然后用它们来标记他添加的商品。)

有人可以提供一些指导吗?

谢谢

1 个答案:

答案 0 :(得分:1)

正如您所指出的,值对象不是实体,因此不应直接从存储库中检索。然而,它们是实体的方面/属性。

当您希望引用Categories的所有Catalog时,您原则上是对Catalog执行查询;您包含哪个Categories

由于CategoriesCatalog都是聚合根,因此您可能需要使用域服务(这些服务存在以执行交叉聚合操作等)。

这可能会产生以下代码:

class CategoryListingService
{
    public ICollection<Category> GetCategoriesForCatalog(Catalog catalog)
    {
        var offers = offerRepository.GetAllOffersFrom(catalog)
        var categories = offers.Select(o => o.Category).Distinct();
        return categories;
    }
}

请注意,这是C#中的示例代码,但它背后的想法应该有效,并允许您列出目录中存在的商品的所有类别。