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

Persistance des données Java Discussion :

[Sérialisation] Problème


Sujet :

Persistance des données Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut [Sérialisation] Problème
    Salut !

    J'ai un problème avec la sérialisation; je vous donne le code et vous explique ensuite :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    public class Fichier {
     
        private Placement sudomodele;
        private Jeu jeumodele;       
     
        public Fichier(Placement smodele,Jeu jmodele) {
            this.sudomodele = smodele;
            this.jeumodele = jmodele;
        }
     
        public void ouverturet() throws IOException{
            JFileChooser jfc=new JFileChooser(".");  
            jfc.setMultiSelectionEnabled(false);
            int retour = jfc.showOpenDialog(null);
            if(retour == JFileChooser.APPROVE_OPTION) {
                File inputFile = new File(jfc.getSelectedFile().getName());
                Scanner sc = new Scanner(inputFile).useDelimiter("\n");
                jeumodele.nouveaujeu();
                sudomodele.initialisationGrille(sc);
            }
        }
     
        public void ouverturej() throws IOException{
            jeumodele.nouveaujeu();
            try {
                FileInputStream fichier = new FileInputStream("sudomi.jeu");
                ObjectInputStream ois = new ObjectInputStream(fichier);
                sudomodele = (Placement) ois.readObject();
            } 
            catch (java.io.IOException e) {
                e.printStackTrace();
            }
            catch (ClassNotFoundException e) {
                e.printStackTrace();
            }        
            sudomodele.notifyObservers();        
        }    
     
        public void sauvegarde(){       
            try {
                FileOutputStream fichier = new FileOutputStream("sudomi.jeu");
                ObjectOutputStream oos = new ObjectOutputStream(fichier);
                oos.writeObject(sudomodele);
                oos.flush();
                oos.close();
            }
            catch (java.io.IOException e) {
                e.printStackTrace();
            }       
        }
    }
    Et pour info :

    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
     
    public abstract class Sudoku {
     
        protected Macase[][] grillep= new Macase [9][9];    
        protected int chiffrechoisi=0;
        protected boolean [] tabmessage = new boolean [4];
        protected boolean jeudemarre;
        protected boolean nouveaujeu;
     
        public Sudoku(){
            for(int i=0;i<9;i++){
                for(int j=0;j<9;j++){
                    this.grillep[i][j]=new Macase();
                }
            }
            for (int i=0;i<tabmessage.length;i++) {
                tabmessage[i]=false;
            }
            this.jeudemarre=false;
        }
     
    ...
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Placement extends Sudoku implements java.io.Serializable{
     
        private static final long serialVersionUID = 3032191156608661892L;
     
    ...
     
    }
    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
    36
     
    public class Pgrmsudoku extends JFrame{
     
        private static final long serialVersionUID = 6787164115803472272L;
     
        Placement sudoku = new Placement();    
        Jeu jeu = new Jeu(sudoku);
        PanelVue1 pVue1 = new PanelVue1(sudoku);
        PanelVue2 pVue2 = new PanelVue2(sudoku,jeu);
        Fichier fichier = new Fichier(sudoku,jeu);    
        Menu menuBar = new Menu(sudoku,fichier,jeu);
     
        public static void main(String args[]) {
     
            try {
                UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
            }
            catch (Exception e) {
                e.printStackTrace();
            }        
            Pgrmsudoku f = new Pgrmsudoku();    
            f.setPreferredSize(new Dimension(900,700));
            f.setResizable(false);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
            f.pack();
            f.setVisible(true);
        }
     
        public Pgrmsudoku(){
     
            this.setTitle("Jeu du Sudoku");
            this.getContentPane().add(pVue1, BorderLayout.EAST);
            this.getContentPane().add(pVue2, BorderLayout.WEST);        
            this.setJMenuBar(menuBar);
        }    
    }
    Voilà ! Je ne vous donne pas les autres classes, c'est sans intéret ...

    En fait, ce sont les méthodes ouverturej et sauvegarde de la classe Fichier qui me causent problème. Le programme tourne bien... mais après une ouverture, je ne retrouve rien de ce qui est censé avoir été enregistré dans le fichier...

    Où est-ce que je me suis fourvoyé ?...
    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Ta classe Placement hérite de ta classe Sudoku qui n'est pas sérialisable, du coup il me semble que tous les membres hérités de la classe Sudoku ne seront pas sérialisés. Essaye en faisant implémenter l'interface Serializable par ta classe Sudoku.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Ben en fait, pas encore car j'ai toujours un petit souci ...

    Bon, maintenant, readObject renvoie tout ce qu'il faut !! Ca, ça roule correctement !

    Mais le problème, c'est que mon notifyObservers devrait mettre ton le prog à jour; or il n'en est rien ... Je suspecte un mauvais emploi de la variable sudomodele ...

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Je ne sais pas ce que fait la methode notifyObservers (peut-tu nous montrer un peu de code), mais en ce qui concerne l'attribut sudomodele sache qu'à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudomodele = (Placement) ois.readObject();
    tu écrase l'instance précedemment stockée (et donc tous les liens éventuels vers d'autres objets).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par le y@m's
    Je ne sais pas ce que fait la methode notifyObservers (peut-tu nous montrer un peu de code), mais en ce qui concerne l'attribut sudomodele sache qu'à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudomodele = (Placement) ois.readObject();
    tu écrase l'instance précedemment stockée (et donc tous les liens éventuels vers d'autres objets).
    Ben, c'est le but de l'écraser ... Enfin, je suppose .
    Sudomodele est la variable qui "contient" l'ensemble des variables de classes de mon programme. Il est donc normal que je l'écrase quand je veux la mettre à jour avec le readObject, non ?...

    Pour le notifyObserver, ben il met à jour tout le GUI (grille de sudoku), grace aux updateObservers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void notifyObservers() {
            Iterator<Observer> iterator = observers.iterator();
            while (iterator.hasNext()) {
                iterator.next().updateObserver();
            }
        }

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Citation Envoyé par Mike888
    Ben, c'est le but de l'écraser ... Enfin, je suppose .
    Sudomodele est la variable qui "contient" l'ensemble des variables de classes de mon programme. Il est donc normal que je l'écrase quand je veux la mettre à jour avec le readObject, non ?...
    Oui c'est normal , je voulais juste insisté sur le fait que les liens avec les autres objets (notamment les observers) n'étés plus valable.
    Tu appel la méthode notifyObservers sur le "nouveau" sudomodele or celui-ci ne connait pas les autres objets (je veus dire par là qu'il n'a aucun lien vers les instances des autres objets).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    A mon avis, y'a un concept sur la serialisation qui m'a échappé ...

    Mais dans mon cas, ca signifie quoi exactement ? Que je dois réinstancier toutes les variables; ou bien recréer de liens ... ?

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Citation Envoyé par Mike888
    Mais dans mon cas, ca signifie quoi exactement ? Que je dois réinstancier tous les variables ?...
    Non pas du tout.
    une fois que tu as récupéré ton sudomodele tu appel la methode notifyObservers, or celle-ci appelle la methode updateObserver de chaque Observer d'une Collection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void notifyObservers() {
            Iterator<Observer> iterator = observers.iterator();
            while (iterator.hasNext()) {
                iterator.next().updateObserver();
            }
        }
    Mais elle sort d'où cette Collection observers ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    D'ici -->


    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
    public abstract class Sudoku implements java.io.Serializable{
     
    ...    
     
        private HashSet<Observer> observers = new HashSet<Observer>();
     
        public void addObserver(Observer observer) {
            observers.add(observer);
        }
     
        public void notifyObservers() {
            Iterator<Observer> iterator = observers.iterator();
            while (iterator.hasNext()) {
                iterator.next().updateObserver();
            }
        }
     
    ...
     
    }

  10. #10
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Tes Observers font donc partie de sudomodele. Alors plusieurs remarques
    1°) Est-ce que tes Observers sont sérialisable ? As-tu vérifier que ton HashSet contient bien les Observers que tu avais lors de la sauvegarde ?
    2°) Je suppose que Tes Observers doivent êtres "liés" à l'interface graphique pour pouvoir la mettre à jour. Donc comment tu "lie" les Observers du sudomodele aux instances des composants graphiques de ton IHM ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par le y@m's

    Tes Observers font donc partie de sudomodele. Alors plusieurs remarques :

    1°) Est-ce que tes Observers sont sérialisables ?
    Ca, c'est une bonne question ! Je n'en ai aucune idée, je peux savoir ça comment ?

    Citation Envoyé par le y@m's

    2°) As-tu vérifié que ton HashSet contient bien les Observers que tu avais lors de la sauvegarde ?
    Tu veux dire lorsque je fais une ouverture ?...

    - Quoiqu'il en soit, lorsque j'inscris un chiffre dans une case (et que donc je fais un appel l'updateObserver d'une mes classes du GUI grace au notifyObserver), voilà ce que j'obtiens, avec un toString de l'observer (par ex pour le chiffre 6) :

    java.util.HashMap$KeyIterator@c3c315
    java.util.HashMap$KeyIterator@c3c315

    NB: J'ai deux observers (d'où les 2 lignes)

    - Si maintenant, je demande qu'il m'affiche le toString après l'ouverture :

    java.util.HashMap$KeyIterator@1e9d9b1
    java.util.HashMap$KeyIterator@1e9d9b1
    java.util.HashMap$KeyIterator@19845fb
    java.util.HashMap$KeyIterator@19845fb


    NB: 2*2 ; il y a eu une duplication (dois-je en déduire que les observers n'ont pas été sérialisés ?...)

    Citation Envoyé par le y@m's

    3°) Je suppose que Tes Observers doivent êtres "liés" à l'interface graphique pour pouvoir la mettre à jour.
    Ah ben oui !!

    Citation Envoyé par le y@m's

    4°) Donc comment tu "lies" les Observers du sudomodele aux instances des composants graphiques de ton IHM ?
    Ben dans ma classe en question, je fais un :

    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
     
    public class PanelVue1 extends JPanel implements Observer{    
     
        private static final long serialVersionUID = -6098308324626190230L;
     
        private Placement sudomodele;    
     
    ...
     
        public PanelVue1(Placement smodele){        
     
            this.sudomodele = smodele;
            smodele.addObserver(this);
     
    ...
     
    }
    }
    En tous cas, merci de m'aider !!

  12. #12
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Ok je crois que je vois ce qui ne va pas.
    Quand tu charge le sudomodele (désérialisation) et que tu appel la methode notifyObserver, celle-ci mets à jour les Observers (les PanelVue1 si j'ai bien compris) contenus dans le HashSet du sudomodele.
    Le problème est que ceux-ci sont différent de ceux qui sont affichés (pas la même instance). Les PanelVue1 que tu vois sur l'interface graphique sont toujours ceux de l'ancien sudomodele.
    Il faut que tu remplace les ancien PanelVue1 par les nouveau (dans ta JFrame ou autre conteneur).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Ah, je vais essayer ça

    NB: j'ai déclaré le HashSet en protected, ça corrige déjà la duplication ...

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    En fait, y'a qqch qui m'echappe dans ton explication :

    Quand tu charge le sudomodele (désérialisation) et que tu appel la methode notifyObserver, celle-ci mets à jour les Observers (les PanelVue1 si j'ai bien compris) contenus dans le HashSet du sudomodele.
    Là, je suis Ok !

    Le problème est que ceux-ci sont différent de ceux qui sont affichés (pas la même instance). Les PanelVue1 que tu vois sur l'interface graphique sont toujours ceux de l'ancien sudomodele.
    Par contre, là, je suis moins d'accord; les PanelVue réagissent en fonction des valeurs des variables des classes du package modèle. Donc, ils devraient etre instantanément mis à jour dès lors que je fais un notify...
    Pourquoi recréer une nouvelle instance de chaque PanelVue ???

  15. #15
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Quand tu sérialise ton sudomodele, tu sérialise tous ses attributs y compris le HashSet et donc les PanelVue. Quand tu désérialise, en fait, de nouvelles instances sont créées en fonctions des données désérialisés.
    Quand tu sérialise, tu sauvegarde la valeur des objets (et pas l'instance). Pour schématiser, le processus de désérialisation consiste à créer une nouvelle instance d'un objet qui aura la même valeur que celle sauvegardée.
    Donc ton sudomodele est lié aux nouvelles instances des PanelVue désérialisés et non à celles qui sont dans ton IHM.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Aaaah Okay !!!
    Merci pour cette claire explication (je vois donc ce qui m'echappait dans la sérialisation ...).

    Bon, maintenant, je vais tester tout ça !!

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    C'est bete mais je vois pas trop comment je peux aller remplacer l'ancien panelVue par le nouveau dans ma classe principale ...
    Peut-être que je me suis trompé dans la conception et que je n'aurais pas du les déclarer là ...

  18. #18
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Je pense effectivement que sérialiser les panels n'est pas la bonne solutions.
    normalement une application se divise en 3 parties :
    • Données (stockage et récupération des données)
    • Métier (traitement des données)
    • Interface utilisateur (affichage et saisie des données)
    et s'agance comme ça :
    Données <-> Métier <-> Interface utilisateur

    Bien que ce soit moins important pour des petites applications (plus une application est petite, plus ces parties on tendance à se rapprocher voir fusionner), il vaut mieux garder ce schéma à l'esprit.

    Voilà, reprend un peu la conception de ton application et n'hésite pas si tu as des questions.

    Bon courage
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    460
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 460
    Points : 112
    Points
    112
    Par défaut
    Ben ecoute, le schema que tu as donné s'applique très bien dans le case de DB par ex...
    Mais ici, c'est plus du MVC (dont j'ai d'ailleurs oté le controleur, comme c'est apparement dans l'air du temps); et je me suis basé sur l'organisation des classes que notre prof emploie et préconise...
    Donc, pour moi, l' "architecture" est correcte ...

    Je continue à chercher

  20. #20
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    La partie donnée n'est pas forcement relié à une BD, il peut aussi s'agir de fichiers plats, (fichiers properties, fichiers xml ou sérialisation dans ton cas).
    Dans ton cas le problème est que tu "mélange" stockage des données et IHM.
    Je suis d'accord sur le fait de ne pas forcement utiliser le schema 3 tiers à la lettre, mais même si les frontières peuvent être floues, je pense qu'il faut en tenir compte un minimum (la preuve, tu as vu les problèmes soulevés dans ton cas ).
    De plus l'architecture 3 tiers n'est pas du tout antinomique avec le pattern MVC.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

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

Discussions similaires

  1. [Débutant] Problème de sérialisation collection
    Par Michel Hubert dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 21/12/2006, 15h17
  2. problème de sérialisation
    Par yoyomc dans le forum Langage
    Réponses: 5
    Dernier message: 17/12/2006, 23h02
  3. Réponses: 4
    Dernier message: 12/12/2006, 10h22
  4. Problème sérialisation XML [C#]
    Par AlphonseBrown dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/04/2006, 22h58
  5. Problème de sérialisation
    Par CheryBen dans le forum Entrée/Sortie
    Réponses: 18
    Dernier message: 15/09/2005, 11h55

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