Архитектура программного обеспечения: обсуждение шаблона проектирования Unit of Work - PullRequest
0 голосов
/ 06 июня 2010

Согласно описанию Мартина Фаулера:

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

Избежание

очень маленькие звонки в базу данных, который оказывается очень медленным

Мне интересно. Если мы просто разграничим это до управления транзакциями базы данных, не подготовим ли операторы справки с этим?

Ответы [ 3 ]

1 голос
/ 06 июня 2010

Хорошая реализация уровня доступа к данным сделает это за вас.Например, Hibernate / NHibernate может отложить сброс изменений до конца транзакции или когда вы явно запрашиваете сброс изменений.Кроме того, вы можете извлечь данные в одной транзакции и сохранить изменения в другой, используя оптимистическую блокировку.Это позволяет избежать длительных транзакций с базой данных.

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

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

1 голос
/ 06 июня 2010

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

В качестве примера рассмотрим приложение AJAX, в котором вы хотите уведомить сервер об определенных операциях, которые вы выполнили на клиенте. Возможно, вы захотите объединить эти операции в одну большую операцию. Сервер может передавать или не передавать данные в базу данных.

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

Ключевым моментом, который следует отметить, является то, что «бизнес-транзакция» и транзакция БД - это две разные вещи.

1 голос
/ 06 июня 2010

Подготовленные выписки не имеют ничего общего с транзакциями.

То, что имеет в виду Фаулер, это задержка в сети: если вы переходите туда и обратно в базу данных, вы каждый раз будете испытывать задержку в сети.

В этом вопросе смешаны две идеи: транзакции и партии. Пакетирование нескольких операций базы данных и отправка их всех в базу данных для обработки может помочь решить и то, о чем говорит Фаулер.

Кого из них вы действительно волнуете здесь?

...