我是一名有用的助手,可以为您翻译文本。
控制器会实例化产品并通过以下方法添加产品本身:
例子二:
“Order”领域模型已注入产品存储库,并将其传递给它,然后获取产品并添加它。
我目前选择了第一个示例,因为您的领域模型不应在内部调用服务方法,但最近我看到了一些使用第二个示例的示例,它看起来很整洁。在我看来,示例一几乎是贫血的。示例二将所有产品添加逻辑移动到领域模型本身中。
我已经使用DDD工作了几个月,遇到了一些我不确定的事情。
以向Order
对象添加Product
的简单示例为例。从我们的控制器中,我们将通过UI传递一个int
,该int
表示数据库中的Product
。以下两个示例哪一个是正确的(如果它们都是错误的,请告诉我)?
示例一:
public class OrderController
{
// Injected Repositories
private readonly IProductRepository _productRepository;
// Called by UI
public void AddProduct(int productId)
{
Order order = ...; // Persisted Order
Product product = _productRepository.GetProduct(productId);
order.AddProduct(product);
}
}
控制器会实例化产品并通过以下方法添加产品本身:
void AddProduct(Product product)
{
productList.Add(product);
}
例子二:
public class OrderController
{
// Injected Repositories
private readonly IProductRepository _productRepository;
// Called by UI
public void AddProduct(int productId)
{
Order order = ...; // Persisted Order
order.AddProduct(productId, _productRepository);
}
}
“Order”领域模型已注入产品存储库,并将其传递给它,然后获取产品并添加它。
Product AddProduct(int productId, IProductRepository productRepository)
{
Product product = productRepository.GetProduct(productId);
productList.Add(product);
return product;
}
我目前选择了第一个示例,因为您的领域模型不应在内部调用服务方法,但最近我看到了一些使用第二个示例的示例,它看起来很整洁。在我看来,示例一几乎是贫血的。示例二将所有产品添加逻辑移动到领域模型本身中。