Удаление объекта при удалении ссылочного объекта

#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 , все равно могут привести к тому, что вы захотите удалить будущие назначения.

Здесь вам понадобится эксперт по предметной области, который поможет вам создать правильную модель и поведение.