IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

un modèle évolutif


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut un modèle évolutif
    Bonjour à tous,

    Je dois développer un outil référençant des outils déjà existants au sein d'une entreprise. Je le fais entièrement en Java. Mon outil affiche donc la fiche d'un outil choisi, cette fiche contient certaines caractéristiques de l'outil comme par exemple les langages dans lesquels il a été développé, les documents qui lui sont associés. Mon problème est le suivant: je voudrais un modèle évolutif, c'est-à-dire pouvoir ajouter des attributs supplémentaires à une fiche outil par la suite. Par exemple, si plus tard, je veux ajouter l'attribut langue à la fiche outil (langue dans laquelle existe l'outil), il faudrait que ça l'ajoute à la base de données et que lors d'une consultation d'une fiche, ça affiche cette caractéristique. Est ce que vous savez comment faire?
    Il faudrait que tous mes attributs soient de type String non? Comme ça pour l'affichage d'une fiche, je mets tous les attributs de l'outil dans un Vector et j'affiche ce que contient le Vector. De plus, quand l'utilisateur voudra entrer une valeur pour ce nouvel attribut, il lui faudra juste un champ texte où il mettre la valeur qu'il souhaite (par exemple le français). Vous en pensez quoi?

    Merci de votre aide

    Liichiii

    PS: j'utilise PostgreSQL

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2004
    Messages : 138
    Par défaut
    Ce que tu cherches c'est un outil qui te mette a jour ta base de données dynamiquement et pas seulement les données mais aussi les champs ?
    Est-ce bien ca ?
    et as-tu d'autres contrainte, version de java ou autre ?

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    oui c ça. pourvoir ajouter des données par la suite, par exemple ajouter les langues anglais ou chinois. mais également pouvoir ajouter des champs par la suite, par exemple ajouter un champ description qui décrit l'outil.
    je n'ai pas d'autres contraintes.

    Merci pour ta réponse si rapide

  4. #4
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    1 >> Dans ta base : mettre une table 'générique' avec les 3 colonnes "produit", "clé" et "valeur"
    2 >> Permettre dans ton interface Swing la saisie par l'utilisateur d'autant de lignes de texte du style "maClé : maValeur1" qu'il veut
    3 >> Charger le tout via un "Properties.load()" qui te renverra une Map des couples de String clé et valeur
    4 >> Parcourir toutes les Properties de ton produit et pour chacune faire un 'insert/update' JDBC avec en clé primaire "produit"+"clé"
    ...
    Voilà!

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2004
    Messages : 138
    Par défaut
    Ben la manière la plus simple est de tout programmé toi meme avec les requetes que tu désire...
    Je sais pas trop quel est ton niveau et qu'est ce que tu sais faire au niveau de SQL et de Java...
    Cherche tu un outil qui remplace ce que tu veux faire ou tu ne sais pas comment faire ?

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    Pour ma part j'utiliserais un outil de mapping Realtionnel/Objet comme par exemple Hibernate. Comme cela la génération soit de ma base ou de mes classes se ferait assez facilement.

    Je me fabriquerais une classe, qui inspecterais la structure de mes classes (Introspection) et qui me fabriquerais à la volée mes interfaces graphiques.
    libellé du champ = nom de l'attribut de la classe.
    valeur de la zone d'infos (Input, Textfield...) = valeur de l'attribut.

  7. #7
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    Bonjour,

    Réponse à Shiftane : je veux faire un outil qui référence des outils existants avec certaines de leurs caractéristiques. Et par la suite, si je veux rajouter des caractéristiques en plus (c'est-à-dire des attributs en plus), je veux que que ce soit faisable. C'est pour ça que l'idée des tables génériques me semble la plus adaptée mais je ne vois pas trop comment faire
    Si je comprends bien les réponses que vous m'avez tous donnés (je vous en remercie beaucoup d'ailleurs), mes champs doivent tous être d'un même type (par exemple String enfin varchar en bdd)... c ça??

    Liichiii

  8. #8
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    c quoi Hibernate? Il permet de faire quoi exactement? Est ce que par la suite je pourrai rajouter des champs à des tables existantes et même de nouvelles tables?

    Merci beaucoup

    Liichiii

  9. #9
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Au niveau de la Base de Données il te faut 1 table "Produit" avec :
    - 1 champs "identifiant" de type VARCHAR faisant partie de la clé primaire (qui contiendra par exemple le nom identifiant de manière unique un Produit),
    - 1 champs "clé" de type VARCHAR faisant partie de la clé primaire (pour chaque propriété du Produit identifié sur cette ligne de base),
    - 1 champs "valeur" de type VARCHAR (pour chaque propriété du Produit identifié sur cette ligne de base).

    Ensuite tu instancies en Java une Map<String clé,String valeur> pour un produit donné, et tu insères et/ou modifies les lignes correspondantes dans la table en B.D.

    Exemple avec 2 produits ayant chacun 3 propriétés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PRODUIT.IDENTIFIANT       | PRODUIT.CLE   | PRODUIT.VALEUR
    --------------------------|---------------|-----------------
    OpenOffice                | version       | 2.0.2
    OpenOffice                | langues       | français, anglais
    OpenOffice                | support       | oui
    Mozilla Firefox           | version       | 1.5.0.3
    Mozilla Firefox           | accessibilité | développeur, analyste, administrateur
    Mozilla Firefox           | commentaire   | préférer à I.E. (coût...)

  10. #10
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    Dans mon modèle, un outil a plusieurs caractéristiques comme les langages de programmation, les OS avec lesquels il est compatible, la langue dans laquelle il a été développé, son environnement de développement mais aussi son nom, une petite description...

    S'il n'y avait pas eu de modèle évolutif à faire, j'aurai fait:
    - une table outil avec comme champ nom, description
    - une table langageDeProg pour le langage de programmation (comme ça si l'utilisateur veut ajouter un nouveau langage de programmation dans la bdd, il peut)
    - une table OS (pour l'ajout d'un nouvel OS)
    - une table langue (pour l'ajout d'une nouvelle langue)
    - une table envDevt pour l'environnement de développement (pour l'ajout d'un nouvel environnement de développement)

    et vu que ce sont des relations n-n il y aurait également eu:
    - une table outil_langageDeProg
    - une table outil_OS
    - une table outil_langue
    - une table outil_envDevt


    Ainsi, quand l'utilisateur voudra ajouter un nouvel outil dans la bdd, il aura un formulaire avec:
    - un champ textfield pour le nom
    - un champ textfield pour la description
    - un menu déroulant pour le langage de prog (qui contiendra les éléments de la table langageDeProg)
    - un menu déroulant pour l'OS (qui contiendra les éléments de la table OS)
    - un menu déroulant pour la langue (qui contiendra les éléments de la table langue)
    - un menu déroulant pour l'environnement de dev (qui contiendra les éléments de la table envDevt)


    Tu peux me dire ce que ça donnerait avec ta solution stp?

    Est ce que c ça?
    (produit - clé - valeur)
    outil - nom - outilXXX
    outil - description - référence les outils existants
    outil - langageDeProg - java
    outil - OS - WinXP
    outil - OS - Win2000
    outil - langue - francais
    outil - langue - anglais
    outil - envDevt - eclipse

    ou ça :
    outil - nom - outilXXX
    outil - description - référence les outils existants
    langageDeProg - nom - java (en supposant que ma table langageDeProg, dans la version du modèle non évolutif, contiendrait un champ nom
    OS - nom - WinXP
    OS - nom - Win2000
    langue - nom - francais
    langue - nom - anglais
    envDevt - nom - eclipse
    envDevt - version - 1.4.2

    Merci pour ton aide précieuse !!

    Liichiii

  11. #11
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Citation Envoyé par liichiii
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (produit - clé - valeur)
    ...
    outilXXX - description - référence les outils existants
    outilXXX - langageDeProg - java
    outilXXX - OS - WinXP
    outilXXX - OS - Win2000
    outilXXX - langue - francais
    outilXXX - langue - anglais
    outilXXX - envDevt - eclipse
    C'est pas mal, à condition que ta clé primaire soit composée des 3 champs dans la base : et côté Java représenter un Produit (identifié par un nom unique) avec une "Map<String clé,Set valeurs>".

  12. #12
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    Ok merci beaucoup je crois que j'ai compris
    Mais dis moi c pas possible de le faire avec toutes les tables comme je t'ai expliqué? (une table langue, une table outil, une table langageDeProg, ...)

  13. #13
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Citation Envoyé par liichiii
    Mais dis moi c pas possible de le faire avec toutes les tables comme je t'ai expliqué? (une table langue, une table outil, une table langageDeProg, ...)
    Si, mais tu perds le côté "évolutif" de ton modèle de données : c'est à toi de voir ce que tu veux en faire...

  14. #14
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    je perds le côté évolutif? c à dire?

    Parce que imagine je fais un menu où je propose de:
    - ajouter une nouvelle table (et ds ce cas, l'utilisateur donne le nom de la table, le nom des attributs et leurs valeurs et la relation de cardinalité avec la table principale outil)
    - ajouter des attributs à une table (ds ce cas, l'utilisateur choisit la table à modifier et donne un nom aux attributs qu'il souhaite créer ds cette table)

    comme ça ça marche aussi non ? et c évolutif?

  15. #15
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    A mon (humble) avis, laisser la possibilité à l'utilisateur de modifier le MODELE des données en base est très "dangereux" et complexe : alors que ne lui permettres que de modifier les DONNEES elles-même c'est plus fiable et simple ;
    bref si tu sais déjà lister les futurs champs nécessaires au recensement d'un produit alors ton modèle en plusieurs tables est valable ;
    mais si tu ne connais pas d'avance tous les champs possibles d'un produit(ceux pré-listés et ceux à venir si l'utilisateur en ajoute) alors le modèle d'une table unique <<id_produit,cle_propriete,valeur_propriete>> est préférable...
    Dans tous les cas -maintenant que tu as les billes- c'est à toi de choisir!

  16. #16
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    complexe? faire des insert, des update, des delete, ça je sais faire avec la méthode PreparedStatement. Est ce que ça marche pareil pour les create table et les alter table ?
    C vrai que c dangereux mais l'idée d'une seule table en bdd, ça me perturbe! lol

  17. #17
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2004
    Messages : 138
    Par défaut
    C est tout autant simple d'ajouter un champs et tu peux meme lui donner un type correspondant au type de valeur que tu veux mettre. Maintenant il te faut programmer ca car je ne connais pas d'outil qui te le fasse. Tu peux toujours regarder Hibernate, je l'utilise mais pas au 100% de ces capacités, alors jette un oeil sur l'api... hibernate.apache.org qqch dans le genre.
    A+

  18. #18
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    "Pourquoi faire simple quand on peut faire compliquer ?"

  19. #19
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    Ca y est! je pense que j'ai trouvé!! (enfin c pas moi ai trouvé la solution!)

    Je fais trois tables :
    - produit (id_produit, nom_produit)
    - cle (id_cle, nom_cle)
    - valeur (id_valeur, id_produit, id_cle, valeur)

    Exemple :
    ds la table produit, j'ai :
    id_produit nom_produit
    1 outil1
    2 outil2

    ds la table cle, j'ai:
    id_cle nom_cle
    1 description
    2 langue
    3 langageDeProg

    ds la table valeur, j'ai:
    id_valeur id_produit id_cle valeur
    1 1 2 français
    2 1 2 anglais


  20. #20
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2004
    Messages : 138
    Par défaut
    J'allais justement te le dire de faire comme ca... LOL
    Bon ben normalement c'est la manière la plus simple...

Discussions similaires

  1. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 02h15
  2. Exportation des graphiques d'un modèle (Power AMC)
    Par boubaouz dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 16/04/2003, 15h59
  3. déposer modèle XML
    Par labyrinth dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 23/12/2002, 22h06
  4. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo