使用DDD,我有4个聚合根,其中,使用预约类比,诊所可以有多个患者,每个患者可以有多个约会,每个约会可以有一些处方。
现在,为了避免在这种情况下创建一个非常大的集合,Clinic,我创建了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;
}
}
现在,问题是我应该如何管理删除患者的情况,在这种情况下,应该删除引用该患者的所有约会。
答案 0 :(得分:2)
我想这是领域专家会派上用场的地方。从技术角度来看,它可能取决于您决定的架构。
100%一致性
在这里,您可以使用应用程序服务首先删除患者,然后删除与该患者相关的所有约会。
最终一致性
使用消息传递,您可以发布将被删除约会的某个端点响应的PatientDeletedEvent
。
<强>然而强>
您可能不希望首先删除患者。即便如此,您对约会(例如设置患者Inactive
)的约定的问题仍可能导致您想要删除未来的约会。
这是您需要领域专家指导您创建正确的模型和行为的地方。