在实例化根实体时是否创建了聚合对象?

时间:2009-04-03 18:13:15

标签: domain-driven-design

或者您是否定义了包含Root Entity对象的新对象?

public class SomeAggregateName()
{
   public EntityRoot root {get;set;}
   public Entity entity {get;set;}
}

OR这是Aggregate隐含的吗?

public class EntityRoot()
{ 
   public Entity entity {get;set;}
}

2 个答案:

答案 0 :(得分:3)

通常暗示汇总 - 即,它是实体。

您的示例会让您更难以理解,因为您实际上没有域名。

但让我们来看一个包含OrderLines的Order Aggregate Root的经典示例。订单是一个实体 - 它也是聚合根。 OrderLine包含在Order Aggregate中,因此无法直接在Order Aggregate之外访问。

// This is the Order Aggregate Root
public class Order
{
    private IList<OrderLine> OrderLines { get; set; }
}

答案 1 :(得分:0)

相关问题:

如果我想使用FluentNHiberanate,例如,初始化我的域实体,它需要我的Order类看起来像这样:

public class Order
{
    public virtual IList<OrderLine> OrderLines { get; set; }
}

这违反了聚合内部实体的封装。 关于如何在不破坏封装的情况下做任何想法?


确定找到了(可用的解决方案之一), 将OrderLines成员更改为private并将其添加到映射文件中:

HasMany(Reveal.Property<Order, IEnumerable<OrderLine>>("OrderLines"))
.Inverse()
.Cascade
.All();