假设我有两个域类 Order 和 OrderItem,其中 Order 用作包含一个或多个订单项的聚合根。如下:
class OrderItem
{
public long LineItemId { get; set; }
public String ProductId { get; set; }
public DateTime CreatedDate { get; set; }
}
class Order
{
public long OrderId { get; set; }
public DateTime OrderDate { get; set; }
public String OrderStatus { get; set; }
public OrderItem[] OrderItems { get; set; }
public DateTime CreatedDate { get; set; }
}
现在,在初始化 Order 对象及其行项目时,是否可以在子项目初始化程序中引用或访问聚合的根属性/字段,如下所示:
var order = new Order
{
OrderId = 1,
OrderDate = new DateTime(2012, 6, 1),
OrderStatus = "OPEN",
CreatedDate = DateTime.Now,
OrderItems = new[]
{
new OrderItem {
LineItemId = 1,
ProductId = "Orange",
CreatedDate = ??? // Initialize this to order's CreatedDate
},
new OrderItem {
LineItemId = 2,
ProductId = "Pear",
CreatedDate = ??? // Initialize this to order's CreatedDate
}
}
};
这里的目标是确保 OrderItem 具有与订单相同的时间戳 (CreatedDate) - 到 T -。这可以很容易地实现 - 无需(当然)引入一个额外的变量来保存 CreatedDate?