Что-то неясное для меня в отношении доменного дизайна и схемы работы.
Допустим, у меня есть объект, который был извлечен из хранилища. Как только я обновил эту сущность, как UnitOfWork должен знать, что она была обновлена, чтобы обновленная сущность могла быть сохранена в БД?
В настоящее время я вижу два варианта:
1) Вручную вызовите uow.Update (entity) на уровне сервиса. E.g.:
Employee emp = EmployeeRepository.GetByID(1);
emp.Name = "NewName";
uow.Update(emp);
uow.Commit();
2) Положитесь на магию ORM для отслеживания изменений и сохранения обновленных сущностей в БД. E.g.:
Employee emp = EmployeeRepository.GetByID(1);
emp.Name = "NewName";
uow.Commit();
Оба эти варианта кажутся мне волосатыми:
Во-первых, если изменения были сделаны внутри некоторого агрегата, агрегат должен сообщить сервисному уровню, что он обновил некоторые сущности.
Второе - разве опора на реализацию ORM не является нарушением принципа невосприимчивости к постоянству?
Что вы делаете в своих проектах? Или, может быть, я что-то упустил / что-то напутал и есть лучшее решение?
Спасибо