2010-10-21 38 views
4

Notre projet est une application Eclipse RCP utilisant Hibernate comme ORM. J'ai récemment découvert la liaison de données JFace, dans laquelle l'interface graphique et les modèles de données peuvent être synchronisés automatiquement.Utilisation de la liaison de données JFace avec Hibernate: est-ce possible?

J'ai mis en place une courte implémentation de test sur le modèle de l'excellent JFace Data Binding Tutorial de Lars Vogel et j'ai été assez impressionné par le framework.

Y a-t-il donc un moyen de relier ceci à Hibernate, de sorte que les modifications apportées à un widget observé soient automatiquement conservées dans la base de données? Cela semble être une chose naturelle à vouloir faire, et pourtant je n'ai trouvé aucun bon tutoriel.

Je soupçonne que je peux aboyer le mauvais arbre, ou avoir manqué un concept fondamental.

Quelqu'un at-il essayé de le faire? Quelle est la "meilleure pratique" ici?

Répondre

2

Je ne pense pas que vous devriez persister votre modèle de données à une base de données après chaque modification dans l'interface graphique. Quelques raisons:

  • il pourrait conduire à vraiment mauvaise performance (le pire des cas appelle une mise à jour de base de données après chaque keystoke)
  • il pourrait être difficile à mettre en œuvre un comportement GUI (par exemple, peut votre utilisateur « annuler 'une opération d'édition? Comment' restaurez 'les valeurs d'origine?)

Si votre formulaire de demande contient une sorte d'application/sauvegarde/etc. bouton et un bouton Annuler vous avez quelques points bien définis où vous avez besoin pour effectuer des opérations de base de données:

  • utilisation de liaison de données pour connecter votre modèle de données et l'interface graphique
  • un Appliquer ou gestionnaire de bouton Enregistrer persiste l'entité modifiée en la base de données
  • un gestionnaire de bouton Annuler peut recharger l'entité modifiée à partir de la base de données si nécessaire (jeter les modifications)

Juste mes deux cents ...

Disclaimer: J'ai utilisé des exemples très simples ci-dessus pour illustrer mes pensées. Par exemple. vous ne devez jamais appeler les opérations de base de données/Hibernation directement à partir de l'interface graphique (utilisez un 'niveau intermédiaire' entre l'interface graphique et la base de données pour assurer la modularité et la testabilité).