gpt4 book ai didi

c# - 在 DDD 中将实体添加到聚合根的正确方法

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:31 24 4
gpt4 key购买 nike

我有一个名为 Order 的聚合根,我需要向 Order 添加一个 Product:

public class Order {
public void AddProduct(Product p) {
}
}

我想请教 DDD 指南。我面临两个问题:

  1. Product 有两个属性,其中包括:Product.OrderIDProduct.Order。就 DDD 而言,我应该在调用 Order.AddProduct 之前设置这些属性中的哪些?

  2. 或者是我需要在 inside Order.AddProduct 中设置这两个属性之一,比如“p.Order = this ";

请注意,我使用 OrderProduct 作为示例。有人告诉我,这种关系可能不合适。谢谢。

最佳答案

让聚合创建实体。对于客户来说,这是最简单的解决方案,因为“创建”和“添加产品”没有分开。

public class Order 
{
private readonly List<Product> _products = new List<Product>();

public Product CreateProduct(string name, Price price)
{
var product = new Product(new ProductId(), name, price);
_products.Add(product);

return product;
}
}

请注意,CreateProduct 的签名可能会因您的需要而异。例如。在某些情况下,您需要提供来自客户的 ID,而在其他情况下,订单会为产品生成一个 ID。

注意:您可能应该具有聚合的 Product 和 OrderItem 或 ProductOrderItem 实体。 OrderItem 是将添加到订单的实体。当您编辑产品时,OrderItems 不会被修改。

关于c# - 在 DDD 中将实体添加到聚合根的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36047846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com