C# 聚合根集合的更新-不符合DDD。有效的替代方案?

C# 聚合根集合的更新-不符合DDD。有效的替代方案?,c#,domain-driven-design,C#,Domain Driven Design,我在学习和实现领域驱动设计的同时,正在开发一个预约计划系统。我已确定以下聚合根-ScheduleDay public class ScheduleDay : Entity, IAggregateRoot { // Value Object - Full datetime and year, month, week, day values as integers public Day Day { get; } // Value Object - schedule for t

我在学习和实现领域驱动设计的同时,正在开发一个预约计划系统。我已确定以下聚合根-ScheduleDay

public class ScheduleDay : Entity, IAggregateRoot
{
    // Value Object - Full datetime and year, month, week, day values as integers
    public Day Day { get; }
    // Value Object - schedule for the day
    public Schedule Schedule { get; }
    
    // Other properties 

    private readonly List<Appointment> _appointments;
    // Value Object - Appointments for the day
    public IReadOnlyCollection<Appointment> Appointments => _appointments;

    // Functions for adding/managing appointments and schedule day
}
当我想更新周五的日程安排时,我只需要更新DB中的一条记录。这个问题(?)是,如果我想做一个新的约会,我必须首先从DB加载计划,然后我需要加载计划日-两个SQL调用

潜在解决方案(2)

将Schedule根聚合和ScheduleDay设置为实体

public class Schedule : Entity, IAggregateRoot 
{ 
    public ScheduleDay ScheduleDay { get; }
}

public class ScheduleDay : Entity { }

因此,我担心聚合太大(根实体和子实体具有子实体集合),我阅读的所有材料都表明聚合应该尽可能小。

聚合根背后的概念是:ScheduleDay完全独立吗?除了与之相关的日程安排之外,你能不能提供两个相等的日程安排日


除此之外,将Schedule设置为IAggregateRoot的解决方案看起来不错。只需确保没有加载所有导航。如果您使用的是EntityFramework,那么可以使用LazyLoading代理。

我读过一些评论,指出在处理聚合根时,延迟加载是反模式的。这是真的,或者只是有时候你不得不违反规则。
public class Schedule : Entity, IAggregateRoot 
{ 
    public ScheduleDay ScheduleDay { get; }
}

public class ScheduleDay : Entity { }