DDD 中的值对象从哪里来?
Where do value objects come from in DDD?
我目前正在从事业余项目以感受 DDD,我想知道从中获取值对象的存储库组件是什么。
在我的市场限界上下文中,目录由商家管理并包含按类别和宇宙组织的报价
在这里,我的猜测是 Merchant、Catalog 和 Universe 将是聚合根,因为它们在系统中具有全局标识,而 Offer 将是 Catalog 聚合的实体,而 Category 将是一个值对象,就像一个标签优惠。
然后我会让存储库充当 AR 持久性的门面,但我不明白,关于 DDD 构建块,我将如何处理类别的检索(商家应该能够在他的目录中定义类别,然后使用它们来标记他添加到其中的商品)。
谁能提供一些指导?
谢谢
正如您所指出的,值对象不是实体,因此不应直接从存储库中检索。但是,它们 aspects/properties 属于一个实体。
当您希望引用 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# 中的示例代码,但它背后的想法应该可行,并允许您列出目录中存在的所有商品类别。
我目前正在从事业余项目以感受 DDD,我想知道从中获取值对象的存储库组件是什么。
在我的市场限界上下文中,目录由商家管理并包含按类别和宇宙组织的报价
在这里,我的猜测是 Merchant、Catalog 和 Universe 将是聚合根,因为它们在系统中具有全局标识,而 Offer 将是 Catalog 聚合的实体,而 Category 将是一个值对象,就像一个标签优惠。
然后我会让存储库充当 AR 持久性的门面,但我不明白,关于 DDD 构建块,我将如何处理类别的检索(商家应该能够在他的目录中定义类别,然后使用它们来标记他添加到其中的商品)。
谁能提供一些指导?
谢谢
正如您所指出的,值对象不是实体,因此不应直接从存储库中检索。但是,它们 aspects/properties 属于一个实体。
当您希望引用 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# 中的示例代码,但它背后的想法应该可行,并允许您列出目录中存在的所有商品类别。