DDD 元素:C# 中的聚合

发布于 2024-08-17 03:26:32 字数 96 浏览 5 评论 0原文

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

一个简短的例子,包含几个类,将会非常有帮助。 或有关此主题的任何链接。

When analyzing life cycle of domain objects, aggregate is basic element for objects grouping.
I am having trouble implementing aggregetes in C#.

One short example, with couple of classes, would be very helpful.
Or any link on this theme.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦幻的心爱 2024-08-24 03:26:32
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 实例之外。这就是聚合根的要点。

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

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

At no point should logic involving OrderLines be exposed outside of an instance of Order. That's the point of aggegrate roots.

For a .NET specific reference, see Applying Domain-Driven Design and Patterns: With Examples in C# and .NET. Of course, the standard reference here is Domain Driven Design: Tackling Complexity in the Heart of Software . There's a good article on MSDN too.

浪漫人生路 2024-08-24 03:26:32

您应该查看 Udi Dahans 博客和 Greg Youngs 博客。其中有很多关于 DDD 和 CQRS 的精彩内容。可以在 Yahoo Doman Driven Design 小组中找到很多好的问题和答案。我知道我没有链接到特定的示例,但是如果您查看此链接,您会发现很多材料和示例。

You should check out Udi Dahans blog and Greg Youngs blog. A lot of great stuff there concerning DDD and CQRS. A lot of good questions and answers can be found and the Yahoo Doman Driven Design group. I know I haven't linked to a specific example, but if you look in this links you will find a lot of material and examples.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文