Как я понимаю, класс UnitOfWork предназначен для представления концепции бизнес-транзакции в домене. Он не должен представлять собой транзакцию базы данных, которая представляет собой деталь только одной возможной реализации.Какова цель метода отката в шаблоне Unit of Work?
Вопрос: Так почему же так много документации о шаблоне Единицы работы относится к методам «Зафиксировать» и «Откат»?
Эти понятия ничего не значат для домена или для экспертов домена. Бизнес-транзакция может быть «завершена», и поэтому UnitOfWork должен предоставить «Полный» метод. Точно так же, вместо метода «Откат», не следует ли его моделировать как «Очистить»?
Update:
Ответ: ниже Оба ответа верны. Это два варианта регистрации UoW: регистрация объектов и регистрация звонящего. При регистрации объекта Rollback служит для отмены изменений для всех объектов в памяти. При регистрации звонящего, Откат служит для очистки всех записанных изменений, так что последующий вызов Commit ничего не сделает.
Интересно, спасибо. Хотя я склонен не согласиться с тем, что UoW относится только к РСУБД (что касается объектных БД или транзакционной памяти). В любом случае, ваш ответ побудил меня сделать больше исследований, и я наткнулся на http://takacsot.freeblog.hu/Files/martinfowler/unitOfWork.html. Я вижу, есть два типа UoW: регистрация звонящего и регистрация объектов. Я использовал регистрацию объектов (через сеансы NHibernate), но я не был явно осведомлен о шаблоне UoW.Еще раз спасибо. –
@gWiz: вы не согласны с UoW - это деталь реализации? Если вы согласны, только точка, с которой я сталкиваюсь, - это методы, которые вы обсуждаете с бизнес-пользователем, не отображаются в UoW. Что касается СУБД по сравнению с другой персистентностью, это семантический аргумент, ваш бизнес-пользователь все равно не заботится - UofW применяется ко всему - мой ответ был обновлен, поскольку он не означает, что он применяется только к реляционным. – orangepips
Интересно. Я думаю, что UoW - это детализация реализации, а концепция домена «бизнес-транзакции», которая важна для экспертов домена. Эксперты не говорят «Commit» или «Rollback», но они могут сказать «если B не принят, а затем не меняет A». Это связано только с тем, что идея бизнес-транзакции скрыта/ожидается для них. Я бы сказал, что в общем случае службы DDD должны иметь «транзакцию» в названии (и могли бы использовать UoW в реализации). –