Код IT Загрузка примера кода…

C# main.cs
// События
public record OrderCreated(Guid OrderId, string CustomerId, DateTime Timestamp);
public record OrderItemAdded(Guid OrderId, Product Product, int Quantity);
public record OrderCompleted(Guid OrderId, decimal TotalAmount);

// Агрегат
public class Order
{
    private readonly List<object> _events = new();
    public Guid Id { get; private set; }
    public string CustomerId { get; private set; }
    public List<OrderItem> Items { get; } = new();
    public bool IsCompleted { get; private set; }

    public void Create(string customerId)
    {
        var ev = new OrderCreated(Id, customerId, DateTime.UtcNow);
        Apply(ev);
        _events.Add(ev);
    }

    public void AddItem(Product product, int quantity)
    {
        var ev = new OrderItemAdded(Id, product, quantity);
        Apply(ev);
        _events.Add(ev);
    }

    public void Complete(decimal totalAmount)
    {
        var ev = new OrderCompleted(Id, totalAmount);
        Apply(ev);
        _events.Add(ev);
    }

    private void Apply(object ev)
    {
        switch (ev)
        {
            case OrderCreated created:
                Id = created.OrderId;
                CustomerId = created.CustomerId;
                break;
            case OrderItemAdded added:
                Items.Add(new OrderItem(added.Product, added.Quantity));
                break;
            case OrderCompleted _:
                IsCompleted = true;
                break;
        }
    }

    public IEnumerable<object> GetUncommittedEvents() => _events;
    public void ClearEvents() => _events.Clear();
}
// События
public record OrderCreated(Guid OrderId, string CustomerId, DateTime Timestamp);
public record OrderItemAdded(Guid OrderId, Product Product, int Quantity);
public record OrderCompleted(Guid OrderId, decimal TotalAmount);

// Агрегат
public class Order
{
    private readonly List<object> _events = new();
    public Guid Id { get; private set; }
    public string CustomerId { get; private set; }
    public List<OrderItem> Items { get; } = new();
    public bool IsCompleted { get; private set; }

    public void Create(string customerId)
    {
        var ev = new OrderCreated(Id, customerId, DateTime.UtcNow);
        Apply(ev);
        _events.Add(ev);
    }

    public void AddItem(Product product, int quantity)
    {
        var ev = new OrderItemAdded(Id, product, quantity);
        Apply(ev);
        _events.Add(ev);
    }

    public void Complete(decimal totalAmount)
    {
        var ev = new OrderCompleted(Id, totalAmount);
        Apply(ev);
        _events.Add(ev);
    }

    private void Apply(object ev)
    {
        switch (ev)
        {
            case OrderCreated created:
                Id = created.OrderId;
                CustomerId = created.CustomerId;
                break;
            case OrderItemAdded added:
                Items.Add(new OrderItem(added.Product, added.Quantity));
                break;
            case OrderCompleted _:
                IsCompleted = true;
                break;
        }
    }

    public IEnumerable<object> GetUncommittedEvents() => _events;
    public void ClearEvents() => _events.Clear();
}