域模型 - 将子项添加到父项的正确方法是什么?

时间:2015-01-03 17:49:40

标签: domain-driven-design parent-child domain-model

我有父母和子女班。没有父母,孩子没有意义存在,我希望孩子有一个对其父母的引用。

这是设置对子项中父项的引用以及将父项添加到父项集合中的一种好方法吗?或者有更好的方法吗?

public class Order
{
     public Guid Id {get; private set;}
     public Name Id {get; private set;}
     IEnumberable<Item> Items {get; private set;}

     public Order(Guid id, string name)
     {
          Id = id;
          name = name;
          Items = new List<Item>();
     }

     public void AddItem(Item item)
     {
            var items = Items.ToList();
            items.Add(item);
            Items  = items;
     }

}

public class Item
{
     public Guid Id {get; private set;}
     public Name Id {get; private set;}
     public Order Order {get; private set;}

     public Item(Guid id, string name, Order order)
     {
          Id = id;
          name = name;
          Order = order;
          Order.AddItem(this);
     }
}

似乎将孩子从孩子内部添加到父母的集合中是个坏主意,但也许是这样。建立这些关系的最佳方式是什么?

2 个答案:

答案 0 :(得分:0)

您应该问自己&#34;为什么我要通过项目&#34;找到订单。你能真正找到一个好用例吗?在这种情况下,Order是聚合根,所以你应该通过订单操作。在某些情况下,如果您需要查找放置在项目上的所有订单,那么在项目上设置订单集合可能是有意义的。在这种情况下,Item也将是一个聚合根。

答案 1 :(得分:0)

在您的情况下,孩子不应将自己添加到父集合中。如果您需要对父项的引用,则更好的方法是在父项中设置父项,方法是将子项添加到列表中。这意味着在将项目添加到items后立即设置项目的订单。