DDD元素:c#中的聚合

时间:2010-01-07 20:30:29

标签: c# domain-driven-design aggregate

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

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

2 个答案:

答案 0 :(得分:7)

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;
    }
}

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

有关.NET特定的参考,请参阅Applying Domain-Driven Design and Patterns: With Examples in C# and .NET。当然,这里的标准参考是Domain Driven Design: Tackling Complexity in the Heart of Software 。关于MSDN也有一篇很好的文章。

答案 1 :(得分:1)

您应该查看Udi Dahans博客和Greg Youngs博客。那里有很多关于DDD和CQRS的好东西。可以找到很多好的问题和答案以及Yahoo Doman Driven Design小组。我知道我没有链接到一个具体的例子,但如果你查看这个链接,你会发现很多材料和例子。