Код: Выделить всё
public void AddEmployee(Employee employee)
{
bool HasBeenAdded = AssignedEmployees.Add(employee);
if (HasBeenAdded)
AddEvent(new EmployeeAddedToScheduleItem(this, employee));
}
public void AddEmployeesRange(ICollection employees)
{
foreach (var emp in employees)
AddEmployee(emp);
}
Проблема
Мне нужно выполнить две операции при добавлении сотрудников:< /p>
Синхронизируйте изменения с базой данных (что в идеале должно представлять собой единую массовую операцию для повышения эффективности),
отправьте приветственное электронное письмо каждому новому сотруднику
Текущая реализация вызывает событие EmployeeAddedToScheduleItem для каждого добавленного сотрудника. Это приводит к множественным обновлениям базы данных при добавлении нескольких сотрудников, что неэффективно для синхронизации базы данных.
Что я ищу
Мне нужно решение, которое позволит мне:
Использовать события предметной области для поддержания разделения задач в моей архитектуре DDD.
Выполнять единую эффективную операцию синхронизации базы данных при добавлении нескольких сотрудников.
По-прежнему иметь возможность отправлять отдельные приветственные электронные письма каждому новому сотруднику.
Ограничения
Я предпочитаю, если это возможно, существенно не изменять уровень предметной области.
Решение должно соответствовать принципам DDD и продолжать использовать события предметной области.
/>Он должен быть масштабируемым и производительным для добавления и синхронизации большого количества сотрудников.
Вопросы
Как я могу оптимизировать события своего домена, чтобы обеспечить возможность массовой загрузки синхронизацию базы данных, сохраняя при этом возможность индивидуальной обработки электронной почты?
Существуют ли в DDD шаблоны или подходы, которые обеспечивают массовые операции и эффективную синхронизацию базы данных без ущерба для использования событий домена?
Как бы вы это реализовали, чтобы обеспечить эффективную синхронизацию базы данных? сохраняя при этом преимущества событий предметной области?
Мы будем очень признательны за любые идеи, примеры кода или предложения по архитектуре, особенно те, которые направлены на оптимизацию событий предметной области как для массовых операций, так и для эффективной синхронизации базы данных!
Кроме того, я знаю, что могу создать своего рода BulkEmployeesAddedEvent, а затем в обработчике событий домена перебирать коллекцию недавно добавленных сотрудников, но это не похоже на первоклассное решение. Это потребует от меня либо всегда использовать AddEmployesRange даже при добавлении одного пользователя, либо при создании двух обработчиков доменаEventHandler с почти одинаковым кодом.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ync-in-ddd