Какова цель Менеджеров / Транзакций? - PullRequest
6 голосов
/ 10 июня 2010

Я впервые создаю весеннее приложение.У меня много проблем с параллелизмом, и я подозреваю, что что-то не так с управлением сервером.Единственное отличие, которое я вижу между моим внутренним кодом и примерами, которые я видел, это классы менеджера.

В моем коде моя модель (управляемая hibernate) и мои DAO вдобавок к этому выполняют CRUD /поиск / и т. д. на моделях.В примере кода, который я рассмотрел, они никогда не используют DAO напрямую.Вместо этого они используют классы менеджера, которые косвенно вызывают DAO.Мне это кажется бессмысленным дублированием кода.

Для чего нужны эти классы менеджеров?Я читал, что они заключают мой код в «транзакции», но зачем мне это нужно?

Ответы [ 3 ]

5 голосов
/ 10 июня 2010

Транзакции используются для того, чтобы сделать обновления «транзакционными».

Пример) Пользователь щелкает веб-страницу, которая приводит к обновлению 13 записей в базе данных.Транзакция обеспечит выполнение 0 или 13 обновлений, а ошибка приведет к их откату.

Менеджеры должны упростить задачу.Они волшебным образом не сделают ваш код безопасным.Использование DAO напрямую само по себе не является ошибкой безопасности потоков.

Однако я предлагаю вам ограничить логику в DAO и использовать как можно больше логики на бизнес-уровнях.См. Рекомендации по использованию шаблона DAO?

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

2 голосов
/ 10 июня 2010

Многие приложения имеют нетривиальные требования, и бизнес-логика часто включает в себя доступ к нескольким ресурсам (например, нескольким DAO), координацию этих доступов и контроль транзакций через эти доступы (если вы обращаетесь к DAO1 и DAO2, вы хотите зафиксировать или откатитьизменения как неделимая единица работы).

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

И это именно то, что делают менеджеры, о которых вы говорите, они составляют Уровень обслуживания .

Сервисный уровень определяет границу приложения [Cockburn PloP] и его набор доступных операций с точки зрения взаимодействия клиентских слоев.Он инкапсулирует бизнес-логику приложения, управляет транзакциями и координирует ответы при реализации своих операций.

0 голосов
/ 10 июня 2010

DAO не должны владеть транзакциями, потому что у них нет возможности узнать, являются ли они только частью более крупной транзакции.

Сервисный уровень - это место, к которому относятся транзакции. Вы ошибаетесь, говоря, что это «бессмысленное дублирование кода».

...