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 :

Meilleure collection pour filtrer


Sujet :

Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut Meilleure collection pour filtrer
    Bonjour à tous (désolé me revoilà),

    J'ai une d'ordre existentielle, savez-vous qu'elle serait la collection la plus adapté à ce que je voudrais faire c'est à dire :
    J'ai un fichier Xml qui contient x données, je voudrais récupérer uniquement les données correspondant à la chambre n après réflexion je me dis que j'ai peut-être pas besoin de tout charger dans une collection et ensuite filtrer ce que j'ai besoin ??

    Merci d'avance à tous.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Je pense que oui : tu es dans le cadre d'un devoir et pas d'une application qui doit enregistrer dans une base.
    En chargeant les chambres une fois en mémoire, tu n'auras pas à accéder à chaque échange à ton fichier XML
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Merci Népomucène pour ta réponse mais que veux tu dire exactement ? Que je dois lors de la 1ere lecture de mon fichier XML tout charger dans une collection (si tel est le cas, quelle collection serait la plus adapté ?) ou relire mon fichier XML et récupérer que ce dont j'ai besoin ?

    Merci d'avance.

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Je crois que tu as créé une classe pour représenter une chambre.
    Comme il s'agit d'un devoir, je pense que la quantité de données n'est pas trop grande (< 500 Mo)
    Donc tu peux te permettre de charger toutes tes chambres dans une Map qui a l'avantage de te donner l'accès par clé.
    Tu pourras accéder à un objet "chambre" par son numéro si tu choisis (ce que je pense) de prendre le n° de chambre comme clé

    regarde : http://java.developpez.com/faq/java/...TIONS_info_map
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    L'idée c'est de dire :

    - au démarrage, je charge le xml dans quelque chose (on verra après ce que c'est) qui reste en mémoire
    - à chaque fois que j'ajoute un nouvel élément, je l'ajoute dans ce quelque chose, et je sauvegarde dans le xml (en tâche de fond éventuellement, avec un Executor), comme ça le xml est toujours le plus à jour possible : mais comme le quelque chose est en mémoire et à jour, pas besoin de le charge.

    Ensuite décrivons le quelque chose. Le mieux serait de faire un classe qui à une ou plusieurs variables, ce qui permet de changer la façon dont on stocke les données, sans avoir à changer toutes les classes et méthodes qui y ont accès.

    Ensuite, la question de quelle collection. Evidemment, ça dépend de ce que tu veux en faire.

    A là base une ArrayList est le choix le plus commun, est ça le fait le job pour la plupart des cas. Simplement une ArrayList est rapide en parcourt et accès direct à un élément dont on connait l'index, plutôt en ajout et suppression à la fin, mais lente pour les ajouts et suppressions au début et au milieu. Mais il faut quand même avoir un très grand nombre de manipulations très souvent pour que ça se ressente.

    Il y a une alternative : le Set. L'avantage du Set est qu'il garantit l'unicité des éléments qu'on y met (mais on peut le garantir aussi avec un minimum de code, ou en faisant simplement attention à ce qu'on fait, avec l'ArrayList). Lorsqu'on utilise un HashSet, le test pour savoir si un élément est dans le set est très rapide. Mais l'inconvénient d'un Set est qu'on ne peut pas accèder à un élément directement par son index, mais les Stream peuvent nous aider, mais avec une performance moindre qu'avec un ArrayList (mais dans ton cadre, ça ne se verra pas vraiment).

    Ensuite, il y a l'accès aux données selon une clef, ou un ensemble de clefs (un peu l'équivalent du where SQL), et, là, une ArrayList est relativement très lente pour ça : on peut l'assister avec une ou plusieurs Map selon les cas, et c'est assez simple à gérer.

    Si tu as peu d'accès via l'index, mais beaucoup plus souvent par une clef, la Map suffira (on peut toujours parcourir son values()).


    Ensuite, pour filter, pour faire des traitements en masse en particulier, tu as également les Stream. Ce qui peut te permettre également de générer des listes intermédiaires pour certains traitements : par exemple un traitement particulier sur toutes les chambres occupées.

    [EDIT]Grillé par @Népomucène
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    [EDIT]Grillé par @Népomucène
    Ne me dis pas que j'ai été plus rapide que toi ??? ça doit être un bug du forum
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Ok ! Merci à tous les 2 pour ces précisions. Je vais quand vous apporter quelques précisions sur le fonctionnement de mon appli après ce sera certainement plus claire pour vous, à savoir qu'une grande partie a été faite en contribution avec Joël (d'ailleurs je crois qu'à la fin de mon projet je vais mettre fait par joel.drigo).

    Commençons par son commencement :
    1 - J'ai une fenêtre principale qui me sert à créer, supprimer et visualiser des réservations, je vais insister sur le mot visualiser car c'est sur lui que je veux faire un filtre.
    2 - Le chargement des données ce fait 1 seule fois et uniquement à l'ouverture du logiciel dans des collections de type ArrayList.
    3 - A chaque mise à jour des données (ajouter, modifier et supprimer) les collections sont modifiés en fonction de l'action à faire et les fichiers XML sont mis à jour à leur tour mais en aucun cas je refais une relecture de ceux-ci.

    Donc je pense que tel que la décrit Joël, je dois être bon dans mon fonctionnement.

    Pour finir et c'est là le sujet de ma question :
    Lorsque l'utilisateur clique sur visualiser, je dois être capable de récupérer toutes les réservations de la chambre en question, exemple :
    Si je veux voir toutes les réservations de la chambre 1 je dois être de les récupérer dans une collection de type sont ensuite j'en ferai la lecture pour les afficher dans une jTable.

    Je crois que les collections de type Map n'accepte pas les clés en doublons donc si je dois m'en servir il va falloir que je fasse un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HashMap<String, List<Booking>> cache = new HashMap<String, List<Booking>>();
    Qu'est ce que vous en pensez ?

    EDIT : Dactylo ce n'est pas mon fort, donc je met un peu de temps à écrire quelques lignes contrairement à Joël qui arrive à écrire des romans en 5mn

    Merci d'avance

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Oui, cela a l'air bien :
    Tu accèdes à la liste des résa par la clé de la chambre. L'objectif est atteint.
    Pareil pour ajouter une résa : cache.get(numChambre).add(monObjetRésa)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Je complète la réponse de @Népomucène :

    Tu peux également faire une Map<Chambre, List<Booking>>, voire Map<Chambre, Bookings>, ou Bookings est une classe qui encapsule une List, ou un Map, ou tout autre instance qui t'arrange pour gérer les Booking.

    Pour avoir utiliser Chambre en tant que clef, il te faudra respecter 3 choses :

    • avoir une méthode equals qui garantit que si chambre1.equals(chambre2) alors chambre2.equals(chambre1)
    • une méthode hashcode qui garantit que si chambre1.equals(chambre2) alors chambre1.hashCode()==chambre2.hashCode()
    • et que tout ce qui est utilisé pour calculer le hashCode et pour déterminer l'égalité vraie entre 2 chambres est immutable (ne peut jamais être changé tant que les chambres sont en clefs dans la map)


    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class Chambre {
     
        private final int numero;
     
        private boolean occupee;
     
       public Chambre(int numero) {
           this.numero=numero;
       }
     
       public final int getNumero() {
            return numero;
       }
     
       public boolean estOccupee() {
            return occupee;
       }
     
       public void setOccupee(boolean occupee) {
           this.occupee=occupee;
       }
     
       public int hashCode() {
           return Objects.hash(numero);
       }
     
       public boolean equals(Object obj) {
           if ( obj instanceof Chambre ) { // ou plus restrictif : ( obj!=null && obj.getClass().equals(Chambre.class) )
               final Chambre chambre = (Chambre)obj;
               return chambre.numero==numero;
           }
           return false;
       }
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Je complète la réponse de @Népomucène :
    si après ça tu n'as pas une bonne note !!!
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Effectivement je l'espère surtout avec tout le mal que je me suis donnée, ben évidemment votre contribution m'a été forte utile et ça je ne pourrais jamais l'oublier.
    Après on ne connait pas les gens et peut être que les attentes de mon prof ne sont pas dans mon projet donc ??? J'aurai quand même la fierté d'avoir fait un programme en JAVA et rencontré des gens comme vous.

    Merci pour tout

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Désolé de revenir encore sur sujet mais en regardant la structure de mon fichier XML, je me pose la question de savoir comment m'organiser pour affecter à la collection Map<Chambre, List<Booking>> les données correspondant à celle-ci ?
    Je vais mettre la représentation du fichier XML pour que cela soit plus compréhensible :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8"?>
    <booking>
      <customer id="ZXHAU" checkin="2015/1/24" numberofnights="3">
        <firstname>John</firstname>
        <lastname>Rambo</lastname>
        <id type="passeport">JR14231</id>
        <address/>
        <phone>0112365478</phone>
        <email>John.Rambo@gmail.com</email>
        <room id="103" type="rt1" state="available"/>
      </customer>
    </booking>

    Comme je l'avais un peu plus haut dans mes messages, je charge une seule fois dans une collection de type List mon fichier XML donc, faut-il lors de la visualisation des réservations pour une chambre donnée que je parcours ma collection de type puis que j'ajoute les éléments trouvés dans Map<Chambre, List<Booking>> ? Ça fait pas un peu trop redondant tout ça ?

    Merci d'avance.

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jb_One73 Voir le message
    Comme je l'avais un peu plus haut dans mes messages, je charge une seule fois dans une collection de type List mon fichier XML donc, faut-il lors de la visualisation des réservations pour une chambre donnée que je parcours ma collection de type puis que j'ajoute les éléments trouvés dans Map<Chambre, List<Booking>> ? Ça fait pas un peu trop redondant tout ça ?
    A priori, tu as une List<Chambre> que tu as créé lorsque tu as chargé ton xml. Et je ne vois pas trop le rapport avec la map. Tu vois où une notion de redondance ?

    La méthode reserver pourrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void reserver(Chambre chambre, Booking booking) {
     
        List<Booking> roomBookings = bookings.get(chambre);
     
        if( bookings==null ) {
           // première réservation
           roomBookings = new ArrayList<>();
           bookings.put( chambre, roomBookings );
        }
     
        // stockage de la réservation
        roomBookings.add( booking );
     
    }
    pour la sauvegarde on peut avoir, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(Chambre chambre : listeChambres) {
        List<Booking> roomBookings = bookings.get(chambre);
        save(chambre, roomBookings...);
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Mince ! J'ai l'impression que je n'ai pas dû m'expliquer correctement donc je vais essayé de repartir de 0 et si jamais c'est pas bon je ferai des captures d'écran.

    Alors, mon problème de base c'est de savoir comment charger des données de réservation correspondant à un n° de chambre en gros cela reviendrait à faire ceci :
    SELECT * FROM BOOKING WHERE ROOM = '1', j'exagère mais ça serait ça sauf que c'est sur un fichier XML dont j'ai posté la structure dans mon précédent message.

    Pour continuer :
    Avant d'en arriver à la visualisation des réservations, je charge les données contenu dans le fichier XML nommé booking.xml dans une List<Booking> array = new ArrayList<>(), cette collection va donc me contenir l'intégralité des données du fichier booking.xml c'est à dire le customer, la room et le booking donc tout ça est mélangé et tout ça me fait revenir à ma question principale que j'ai cité plus haut dans ce message.

    Je sais pas si vous avez réussi à comprendre ce que j'essai de dire ? Juste une petite parenthèse : une jFrame qui pour le moment contient 1500 lignes de code est-ce que c'est beaucoup sachant qu'un l'intérieur il y a la conception du GUI ?

    Merci d'avance.

    Je vais apporter une précision concernant le fichier XML.
    L'attribut <customer> est celui qui sert de séparation pour une réservation, là entre autre je n'en ai qu'une pour une seconde j'aurai la même chose avec <customer><firstname><.....></customer>.
    J'ai donc créé une classe Booking qui contient tous les get du fichiers xml (firstname, lastname, ..., room).

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jb_One73 Voir le message
    Alors, mon problème de base c'est de savoir comment charger des données de réservation correspondant à un n° de chambre en gros cela reviendrait à faire ceci :
    SELECT * FROM BOOKING WHERE ROOM = '1', j'exagère mais ça serait ça sauf que c'est sur un fichier XML dont j'ai posté la structure dans mon précédent message.
    On avait pas dit qu'on chargeait toutes les données au démarrage ? Pour moi ça voulait dire les chambres, les réservations, etc. Tu charges tout une fois, tu sauvegarde ce qu'il faut au fur et à mesure qu'il y a des modifications( ou des créations, ou suppressions), et donc le SELECT * FROM BOOKING WHERE ROOM = '1', revient à faire un get() sur ta map.

    Citation Envoyé par Jb_One73 Voir le message
    Pour continuer :
    Avant d'en arriver à la visualisation des réservations, je charge les données contenu dans le fichier XML nommé booking.xml dans une List<Booking> array = new ArrayList<>(), cette collection va donc me contenir l'intégralité des données du fichier booking.xml c'est à dire le customer, la room et le booking donc tout ça est mélangé et tout ça me fait revenir à ma question principale que j'ai cité plus haut dans ce message.
    ce n'est plus vraiment un problème si tu charges tout au démarrage. Le seul problème que tu peux avoir, c'est un problème de mémoire : la JVM est configurée par défaut pour 64Mo. Faudra voir si ce n'est pas un peu juste. Mettre 256 Mo (paramètre -Xmx) n'est pas trop exagéré vu la RAM qu'on a disposition sur les machines aujourd'hui, et ça devrait déjà être pas mal.

    Citation Envoyé par Jb_One73 Voir le message
    Je sais pas si vous avez réussi à comprendre ce que j'essai de dire ? Juste une petite parenthèse : une jFrame qui pour le moment contient 1500 lignes de code est-ce que c'est beaucoup sachant qu'un l'intérieur il y a la conception du GUI ?
    Ça dépend comment elles sont réparties entre les méthodes. avoir 50 méthodes de 30 lignes, il n'y a rien d'anormal, Si tu as 2 méthodes de 750 lignes, il faut probablement factoriser et répartir. En plus ça dépend un peu comment tu comptes les lignes (ça comprends les lignes blanches, les commentaires, les déclarations de classe, les lignes où il y a juste une } ? L'application sur laquelle je bosse à 3,5 millions de lignes de code (sans les lignes blanches et les commentaires - et ce n'est que le client RCP, avec plein de bibliothèques - donc avec énormément de code que tu dois faire toi-même) : tu as encore de la marge Bon d'accord, elle fait nettement plus de choses que la tienne.

    Merci d'avance.

    Citation Envoyé par Jb_One73 Voir le message
    Je vais apporter une précision concernant le fichier XML.
    L'attribut <customer> est celui qui sert de séparation pour une réservation, là entre autre je n'en ai qu'une pour une seconde j'aurai la même chose avec <customer><firstname><.....></customer>.
    J'ai donc créé une classe Booking qui contient tous les get du fichiers xml (firstname, lastname, ..., room).
    [/QUOTE]
    Ça, faut voir : si tu veux faire un suivi de client (ceux qui reviennent plusieurs fois), il faudrait peut-être faire un fichier à part et pointer dessus avec un id. Mais ce n'est peut-être pas essentielle pour ton projet. Tout dépend du temps qu'il te restera quand tu auras fait l'essentiel : je ne sais pas si tu dois faire un mémoire de présentation, mais ça pourrait être simplement une bonne idée de dire dedans que, comme amélioration possible, on pourrait le faire en donnant quelques extraits de code, quelques données techniques (format xml) etc...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    J'avais poursuivi dans la modif de mon message mais je me rend compte que tu as répondu après donc je vais remettre ce que j'ai noté dans celui-ci pour que tu le prenne en compte :

    Je viens de me rendre compte que cela allait être plus compliqué que ce que je pensais. Après réflexion, je me rend compte que la structure du fichier est pas très top dans le sens ou tout est mélangé pour le client, j'ai donc demandé à mon prof si je pouvais modifier la structure du fichier et il m'a dit qu'il n'y avait aucun problème, donc pour aller plus loin dans ma réflexion il me semblerait plus judicieux de créer 2 fichiers xml.
    1 - booking customer (n° de résa, client)
    2 - booking room (n° de résa, room)
    Les 2 seraient liés par un même id de résa et de cette façon, je pourrais charger dans une nouvelle collection mes chambres dans laquelle seraient stockées les dates de résa.

    Qu'en penses-tu ?

    Pour continuer, 3.5 millions de lignes !!!! Moi j'en ai un peux plus de 5000 en tout (lignes blanches, commentaires, etc inclus) et je deviens dingue donc toi avec ce que tu m'annonces je saute par la fenêtre ... bon ça va ! Il n'y a pas d'étage mais bon ....

    Toujours pour continuer :
    Si ! Si ! On a bien dit que l'on chargé toutes les données au démarrage et c'est ce que je fais, je charge bien les chambres, les clients et les résas et ensuite je sauvegarde que ce dont j'ai besoin lorsque je fais une modifs (si c'est pour un client je modifie que le fichier xml du client etc.)

    Normalement, si j'ai écouté tout ce que tu m'as dit de faire ça doit être correct mais demande moi pas d'en faire 3.5millions car là ça va pas être possible ou peut être que si avec des copier/coller rébarbatif

  17. #17
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jb_One73 Voir le message
    J'avais poursuivi dans la modif de mon message mais je me rend compte que tu as répondu après donc je vais remettre ce que j'ai noté dans celui-ci pour que tu le prenne en compte :

    Je viens de me rendre compte que cela allait être plus compliqué que ce que je pensais. Après réflexion, je me rend compte que la structure du fichier est pas très top dans le sens ou tout est mélangé pour le client, j'ai donc demandé à mon prof si je pouvais modifier la structure du fichier et il m'a dit qu'il n'y avait aucun problème, donc pour aller plus loin dans ma réflexion il me semblerait plus judicieux de créer 2 fichiers xml.
    1 - booking customer (n° de résa, client)
    2 - booking room (n° de résa, room)
    Les 2 seraient liés par un même id de résa et de cette façon, je pourrais charger dans une nouvelle collection mes chambres dans laquelle seraient stockées les dates de résa.

    Qu'en penses-tu ?
    Actuellement tu as un xml pour la description de l'hotel et un pour les résa, c'est ça ? Faire 2 fichiers n'a pas grand intérêt pour le chargement, mais pour la sauvegarde, ça peut aider à éviter d'avoir à sauvegarde sans arrêt quelque chose qui change très peu. Mais scinder le fichier résa en 2, j'ai du mal à voir comme ça ce que ça pourrait apporter. Sauf si tu fais un suivi des clients (ce dont je t'ai parlé dans le précédent message). Même si tu as lien n-n (un même client peut réserver plusieurs chambres et une chambre peut être réservée par plusieurs clients différents : en plus, le problème quand on gère une liste d'ids dans 2 fichiers, ce sont les problèmes d'incohérences (normalement ça ne devrait jamais arrivé, si le code est parfaitement écrit, mais quand ça arrive, et ça peut, on se retrouve avec la moitié des données qu'on ne sais pas raccrocher). Mais vaut-il mieux perdre un couple réservation/client, ou n'avoir que l'un des eux dont on ne peut rien faire. Remarque, on sait toujours au moins qu'on a perdu quelque chose.

    Par contre, toujours dans l'optique d'un chargement unique au démarrage de l'application, avoir 2 fichiers ou 2 ne changent rien.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Pour être assez claire, j'ai en tout 5 fichiers xml (client, hôtel, réservation, chambre et type de chambre (celui-ci indique si c'est chambre simple, double, etc et le prix de la chambre)). Maintenant je me suis un peu trop embrouillé dans mon raisonnement et je sais plus s'il faut que je reste avec 1 seul fichier ou que je le scinde en 2 ?
    Ce qui m'embête dans le fichier de résa (booking.xml) que j'ai donné plus haut, c'est que la chambre est renseignée dans le customer du client qui la réservé (en soit c'est normal), donc comment faire quand je vais sélectionner une période pour vérifier si la chambre 50 est dispo ou pas ? Il va falloir que je parcours toute la collection en cherchant toutes les chambres n° 50 et leur date de réservation c'est un peut un travail de titan !!!
    Je viens de me rendre compte de ça, il faut que je vérifie de la dispo de la chambre pour la période donnée ... un véritable casse tête !!!

  19. #19
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Je viens de me rendre compte de ça
    Tu viens surtout de te rendre compte qu'il vaut mieux utiliser une base de données dans ce cas.
    (comme dans tous les cas de gestion d'ailleurs)

    Combien de temps te reste-t-il avant de rendre le boulot ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Par défaut
    Il me reste exactement 11 jours pour le rendre mais je ne peux pas utiliser de BDD (ce qui est dommage) car les fichiers XML me sont imposés donc, soit je vais brûler un cierge tout de suite en espérant avoir fini à temps soit je rend le travail au point où il en sera.
    La deuxième solution m'ennuie un peu mais je ne suis pas Dieu et on en revient à la 1ere solution, là aussi ça devient compliqué. Celui qui a inventé JAVA à pas dû penser à moi

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Les meilleurs livres pour PHP ?
    Par Community Management dans le forum Livres
    Réponses: 187
    Dernier message: 24/05/2015, 03h30
  2. Quels sont les meilleurs livres pour UML ?
    Par Matthieu Brucher dans le forum Livres
    Réponses: 33
    Dernier message: 31/01/2014, 10h36
  3. Les meilleurs livres pour l'Assembleur
    Par gtr dans le forum Livres
    Réponses: 52
    Dernier message: 25/09/2010, 10h25
  4. explications pour filtrer une collection avec iterator
    Par touftouf57 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 20/01/2010, 10h32
  5. Réponses: 3
    Dernier message: 11/06/2008, 16h47

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