DDD元素:c#中的聚合

sha*_*ake 2 c# domain-driven-design aggregate

在分析域对象的生命周期时,聚合是对象分组的基本元素.我在C#中实现aggregetes时遇到问题.

一个简短的例子,有几个类,会非常有帮助.或者这个主题的任何链接.

jas*_*son 8

class Order {
    public int OrderNumber { get; private set; }
    public Address ShippingAddress { get; private set; }
    public Address BillingAddress { get; private set; }
    private readonly IList<OrderLine> OrderLines { get; private set; }
    public void AddItem(Item item, int quantity) {
        OrderLine orderLine = new OrderLine(item, quantity);
        OrderLines.Add(orderLine);
    }
    // constructor etc.
}

class OrderLine {
    public Item Item { get; private set; }
    public int Quantity { get; private set; }        
    public OrderLine(Item item, int quantity) {
        Item = item;
        Quantity = quantity;
    }
}
Run Code Online (Sandbox Code Playgroud)

在任何情况下,逻辑都不应OrderLine暴露在实例之外Order.这是aggegrate起源的重点.

有关.NET特定的参考,请参阅应用域驱动的设计和模式:使用C#和.NET中的示例.当然,这里的标准参考是域驱动设计:解决软件核心中的复杂性.MSDN上也有一篇很好的文章.