Developpez.com - Rubrique Java

Le Club des Développeurs et IT Pro

Comment procédez vous pour maintenir votre mapping Objet / Relationnel

Pendant la vie de vos applications Java ?

Le 2010-03-27 18:29:16, par Ricky81, Expert éminent sénior
Bonjour,

Il existe 2 approches majeures dans le mapping Objet Relationnel :
  • partir de la base de données et générer ses objets mappés avec les outils complémentaires au framework utilisé
  • mettre en place son modèle objet et s'appuyer sur configuration (annotations / xml) du mapping pour créer / mettre à jour sa base de données


Et il y a bien entendu un monde entre les deux, comprenant une approche moins outillée, et également une approche moins méthodique (combinaison des 2 approches par mises à jour dans un sens ou dans l'autre selon la nature de la mise à jour).

L'objet de ce sondage est de voir quelle est la pratique la plus répandue hors initialisation (pour ceux qui démarrent avec un modèle objet / relationnel concu en amont) et d'échanger sur les raisons, avantages et inconvénient.
N'hésitez pas à nuancer dans votre commentaire la phase d'initialisation de celle de maintenance évolutive.
  Discussion forum
11 commentaires
  • natha
    Membre expert
    Hello,

    J'ai voté pour une maj manuelle du modèle relationnel puis maj manuelle aussi des objets.

    On a des outils pour la génération initiale basique des objets à partir du modèle relationnel.

    Difficile de faire mieux car on a greffé l'application sur un modèle relationnel existant et mal conçu.

    Si je devais partir sur un projet neuf, je pense que je m'orienterais vers du JPA avec maj de la base depuis les objets java annotés. Mais n'ayant aucune expérience, je ne sais pas si c'est la meilleure solution, je la trouve cependant élégante.

    ++
  • tchize_
    Expert éminent sénior
    mise à jour manuel du modèle objet (suite aux besoins d'analyse) suivi d'une mise à jour manuelle de la DB (pour avoir le control sur les shéma ainsi créé). On décide ce dont on a besoin dans le shéma objet. Ensuite on décide comment on va stocker ça, et puis seulement, le mapping se plie à la paire ainsi créée. Sinon, par expérience, trop de crasse en db quand on fait pas le relationnel à la main (on fait alors le mapping à la vavite , ce qui implique des tables en trop ou mal contraintes bien souvent)
  • jmoutsinga
    Candidat au Club
    C'est plutôt on (l'architecte technico-fonctionnel) réfléchit à ce que l'on veut stocker et comment on veut le stocker (il utilise son outil pour la modélisation de cette base) et possède son référentiel.
    Puis, on se voit, on discute du schéma. Une fois nos violons accordés, un initial du modèle objet est généré via des outils (actuellement, j'utilise la perspective JPA d'Eclipse (anciennement Dali). Puis, l'enrichissement et la maintenance est faites à la mano (de chaque coté).
    Avec d'abord une mise à jour du modèle relationel puis la mise à jour du modèle objet applicatif.
    C'est plutot lourd mais ca marche bien. Vu qu'il faut de toute facon faire avec un existant toujours plus gros...
  • nicorama
    En attente de confirmation mail
    Je fais une mise à jour, et je génère mes entities via Netbeans, qui écrase les anciennes versions.
    Mes objets métiers sont créés via des Crud ou Experts qui pointent sur les entities, et l'ide montre en général rapidement où sont les mises àjour nécessaires à faire dans les Crud/Experts.
  • Kihmé Xs
    Membre confirmé
    j'ai un mapping à réaliser (en php), je trouve peu d'exemple de classe (je souhaite le faire à la main) afin d'être sur de ce que je fais. Je profite donc que le sujet soit abordé pour savoir si vous n'auriez pas un peu de lecture à me conseiller ou des exemples à me montrer.

    Merci d'avance

    Kihmé
  • Molos
    Membre régulier
    Envoyé par Kihmé

    j'ai un mapping à réaliser (en php), je trouve peu d'exemple de classe (je souhaite le faire à la main) afin d'être sur de ce que je fais. Je profite donc que le sujet soit abordé pour savoir si vous n'auriez pas un peu de lecture à me conseiller ou des exemples à me montrer.

    Merci d'avance

    Kihmé
    Tu as des exemples avec Doctrine sur le site officiel
  • mrjay42
    Membre habitué
    Sur mon dernier projet : PHP5/Zend/postgreSQL on le faisait à la main.
    La taille du projet étant assez réduite et n'était pas prévu pour augmenter en taille dans l'avenir, on est resté en mode manuel.

    Au début c'était plutôt le modèle de données qui conditionnait les objets
    Par la suite, ce sont les besoins concernant les objets qui étaient à l'origine des modifications...
  • Patriarch24
    Membre expérimenté
    Dans la mesure du possible, je fais les modifs de mon modèle objet (à la main ), et les outils me permettent de modifier les modèle relationnel ; cependant, c'est plus une aide qu'une fin en soi, le DBA se chargeant au final d'écrire le script qui va bien (à partir de celui généré).
  • Tcharl
    Membre averti
    Perso, je créée mon diagramme de classe avec emf, et je me suis fait un template acceleo qui me fait le mapping jpa, les services de persistance et la génération du crud avec tests. Roo m'a donné l'inspi, j'en ai fait un à ma sauce pour mes besoins (maven, spring 3, richfaces, cxf, jsf2, jpa2 et hibernate).
    Je ne saurai vous conseiller de faire la même avec vos technos, quitte à y passer 3 mois en autarcie complète, le jeu en vaut la chandelle, tant au niveau apprentissage qu'au niveau résultat!
  • tamiii
    Membre actif
    J'ai déjà testé plusieurs méthodes :

    - générer le mapping/business layer + DAO Hibernate/Spring avec Hibernate POJO Generator : très pratique mais c'est un peu l'usine à configurer pour permettre une génération correcte. L'outil se connecte en JDBC à la bdd et génère toute la couche de persistence - on peut relancer une tâche Ant pour mettre à jour nos sources java à chaque fois qu'on modifie l'architecture de la bdd. Je recommande cet outil mais n'ai jamais testé sur des applis critiques, peut-être que d'autres personnes pourraient donner leur feedback? http://hibernatepojoge.sourceforge.net/

    - utiliser le hbm2ddl à update dans hibernate, avec les annotations. C'est bien mais ça devient vite le bordel si on bosse à plusieurs sur le projet.

    - enfin, la méthode utilisée là où je bosse - la moins flexible mais la plus fiable je pense : design de la bdd à la main et mapping manuel avec annotations dans les entités. Si quelqu'un change l'archi des tables tout plante, c'est normal. Mais au moins on est au courant que notre code n'est plus synchro avec la bdd.