Использование привязки данных JFace с Hibernate: возможно ли это?

Наш проект представляет собой приложение Eclipse RCP, использующее Hibernate в качестве ORM. Недавно я узнал о привязке данных JFace, в которой графический интерфейс и модели данных могут синхронизироваться автоматически.

Я собрал короткую тестовую реализацию по аналогии с превосходным JFace Data Binding Tutorial и был довольно впечатлен фреймворком.

Есть ли способ подключить это к Hibernate, чтобы изменения, сделанные в наблюдаемом виджете, автоматически сохранялись в базе данных? Это кажется естественным, но я не нашел хороших руководств.

Я подозреваю, что, возможно, я лаю не по тому дереву или упустил какую-то фундаментальную концепцию.

Кто-нибудь пробовал это сделать? Какая здесь «лучшая практика»?


person James Cronen    schedule 21.10.2010    source источник


Ответы (1)


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

  • это может привести к действительно плохой производительности (в худшем случае вызывается обновление базы данных после каждого нажатия клавиши)
  • может быть сложно реализовать некоторое поведение графического интерфейса (например, может ли ваш пользователь «отменить» операцию редактирования? Как вы «восстанавливаете» исходные значения?)

Если ваша форма заявки содержит какой-либо вид Apply/Save/etc. кнопку и кнопку «Отмена», у вас есть несколько четко определенных точек, где вам нужно выполнять операции с базой данных:

  • используйте привязку данных для подключения вашей модели данных и графического интерфейса
  • обработчик кнопки «Применить» или «Сохранить» сохраняет отредактированный объект в базе данных
  • обработчик кнопки «Отмена» может при необходимости перезагрузить отредактированный объект из базы данных (отменив изменения)

Просто мои два цента...

Отказ от ответственности: я использовал очень простые примеры выше, чтобы проиллюстрировать свои мысли. Например. вы никогда не должны вызывать операции с базой данных/спящим режимом непосредственно из графического интерфейса (используйте «средний уровень» между графическим интерфейсом и базой данных для обеспечения модульности и возможности тестирования).

person Csaba_H    schedule 30.10.2010