Domain driven design 删除被引用实体时删除实体

Domain driven design 删除被引用实体时删除实体,domain-driven-design,entity-framework-6,Domain Driven Design,Entity Framework 6,使用DDD,我有4个聚合根,其中,使用预约类比,一个诊所可以有多个患者,每个患者可以有多个预约,每个预约可以有多个处方 现在,为了避免创建非常大的膨胀聚合,在本例中,我创建了4个单独的聚合根 public class Clinic { public Guid Id { get; private set; } } public class Patient { public Guid Id { get; private set; } public Guid ClinicI

使用DDD,我有4个聚合根,其中,使用预约类比,一个诊所可以有多个患者,每个患者可以有多个预约,每个预约可以有多个处方

现在,为了避免创建非常大的膨胀聚合,在本例中,我创建了4个单独的聚合根

public class Clinic
{
    public Guid Id { get; private set; }
}

public class Patient
{
    public Guid Id { get; private set; }

    public Guid ClinicId { get; private set; }

    public Patient(Guid clinicId)
    {
        ClinicId = clinicId;
    }
}


public class Appointment
{
    public Guid Id { get; private set; }

    public Guid PatientId { get; private set; }

    public Appointment(Guid patientId)
    {
        PatientId = patientId;
    }
}

现在,问题是我应该如何管理删除患者的场景,在这种情况下,引用该患者的所有预约也应该删除

我想这就是领域专家将派上用场的地方。从技术角度来看,这可能取决于您所决定的体系结构

100%一致性

在这里,您可以使用应用程序服务首先删除患者,然后删除链接到该患者的所有预约

最终一致性

使用消息传递,您可以发布
PatientDeletedEvent
,该事件将由删除约会的某个端点响应

但是

您可能一开始就不想删除患者。即使如此,您关于预约的问题(例如,将患者设置为非活动状态)仍可能导致您希望删除未来的预约

在这里,您需要领域专家来指导您创建正确的模型和行为