Является ли UnitOfWork равным транзакции? Или это больше?

В Интернете полно информации об UnitOfWork ; даже SO не является исключением.

Я до сих пор ничего не понимаю. В моем понимании UnitOfWork = Transaction in DB . Это все; ни больше ни меньше.

Это верно?

Моя путаница связана с тем, как она реализуется в разных ORM . NHibernate использует ISession больше, чем просто Transaction . Dapper оставляет все для вас.

Мой вопрос здесь о шаблоне проектирования, не рассматривая ни ORM ни технологию.

Если это больше, чем просто Transaction , объясните, как это сделать.

Редактировать 1

Ссылка на эту ссылку, предложенную в ответ на @David Osborne.

Единица работы отслеживает все, что вы делаете во время бизнес-транзакции, которая может повлиять на базу данных. Когда все будет готово, он выяснит все, что нужно сделать, чтобы изменить базу данных в результате вашей работы.

Таким образом, это означает, что UnitOfWork – это DBTransaction и многое другое .

Ниже приведены дополнительные обязанности: –

  • Поддерживайте состояние того, что вы изменили, вставили, удалили в этом сеансе работы.

  • На основе этого состояния, измените базу данных, когда работа будет выполнена.

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

Мое понимание сейчас правильное?

Он возникает , AFAIK, из необходимости инструментов ORM отслеживать состояние [persistence] объектов во время логической / бизнес-транзакции.

Как единица работы управляет этим, и его связь с основной технологией хранения и хранящимися объектами, является детальностью реализации.

Транзакция базы данных с рядом SQL-предложений между ними, возможно, также является частью работы. Однако ключевое различие, я полагаю, состоит в том, что единица работы, определенная в шаблоне, абстрагировала этот уровень детализации до уровня объекта.

UnitOfWork – это бизнес-транзакция. Не обязательно техническая сделка (транзакция db), но часто привязанная к техническим транзакциям.

В шаблонах приложений предприятий определяется

Поддерживает список объектов, затронутых бизнес-транзакцией, и координирует запись изменений и разрешение проблем параллелизма.

Он не определяет, как записываются изменения, или тип хранилища.

Объявление может записывать изменения в

  • firebase database с использованием SQL
  • файловая система с использованием streamов
  • служба сохранения с использованием HTTP-запросов
  • распределенный кеш или даже хранилище в памяти с использованием методов invocations

UnitOfWork (бизнес-транзакция) собирает изменения в бизнес-объектах и ​​гарантирует, что другие бизнес-транзакции будут видеть только действительные бизнес-объекты.

Например, когда ваше приложение выполняет прецедент, оно изменяет бизнес-объекты. Если две бизнес-операции (обычно используемые случаи) выполняются параллельно, ваше приложение должно следить за изменениями, которые совершаются каждой бизнес-транзакцией, и временем, когда другие бизнес-транзакции будут видеть их.

Технически это часто делается с использованием транзакции db. Таким образом, единица работы обычно является транзакцией db.

Приложения, использующие ORM-frameworks для обработки персистентности, обычно имеют взаимно-однозначную взаимосвязь между единицей слова и транзакцией db. Таким образом, разница между единицей работы и транзакцией db обычно не имеет отношения к разработчикам.

Давайте будем гением компьютера.