在分析域对象的生命周期时,聚合是对象分组的基本元素。 我在C#中实现aggregetes时遇到问题。
一个简短的例子,有几个班级,会非常有帮助。 或者这个主题的任何链接。
答案 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小组。我知道我没有链接到一个具体的例子,但如果你查看这个链接,你会发现很多材料和例子。