#domain-driven-design #entity-framework-6
#дизайн, управляемый доменом #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 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;
}
}
Теперь вопрос в том, как мне управлять сценарием, в котором пациент удаляется, и в этом случае все назначения, ссылающиеся на этого пациента, также должны быть удалены.
Ответ №1:
Я думаю, именно здесь пригодится эксперт по предметной области. С технической точки зрения это, вероятно, будет зависеть от выбранной вами архитектуры.
100% согласованность
Здесь вы можете использовать службу приложений, чтобы сначала удалить пациента, а затем все встречи, связанные с этим пациентом.
Конечная согласованность
Используя обмен сообщениями, вы можете опубликовать PatientDeletedEvent
, на который будет отвечать некоторая конечная точка, которая удалит встречи.
Однако
Вероятно, вы не хотите удалять пациентов в первую очередь. Даже в этом случае ваши вопросы о назначениях, скажем, для назначения пациента Inactive
, все равно могут привести к тому, что вы захотите удалить будущие назначения.
Здесь вам понадобится эксперт по предметной области, который поможет вам создать правильную модель и поведение.