领域驱动设计——DDD中的值对象来自哪里?



我目前正在做一个副业项目,以获得DDD的感觉,我想知道从存储库中获取值对象的组件是什么。

在我的市场限定上下文中,目录由商家管理,并包含按类别和范围组织的优惠

在这里,我的猜测是商人、目录和宇宙将是聚合根,因为它们在系统中具有全局身份,而报价将是目录聚合的实体,类别将是一个价值对象,就像报价上的标签一样。

然后我将有存储库作为ar持久性的门面,但是我不知道如何,关于DDD构建块,我要处理类别的检索(商家应该能够在他的目录中定义类别,然后使用它们来标记他添加到其中的报价)。

有谁能指点一下吗?

Thank you

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

当您希望引用Catalog中的所有Categories时,原则上,您将对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#的示例代码,但其背后的思想应该是可行的,并允许您列出目录中存在的所有类别的报价

相关内容

  • 没有找到相关文章

最新更新