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

Design Patterns Discussion :

couplage pattern mvc et factory [Fabrique]


Sujet :

Design Patterns

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Points : 97
    Points
    97
    Par défaut couplage pattern mvc et factory
    bonsoir,

    autant le dire tout de suite, je viens du monde procedural et je debute en objet et en architecture mvc, alors j'ai un peu de mal a mettre en place mon appli.

    c assez simple:
    en entrée je peux avoir plusieurs sortes de fichiers (different dans leur structure)
    ce que je veux faire est identique pour l'ensemble :
    - importer le fichier
    - valider le fichier par rapport a la structure attendue
    - integrer le fichier valide dans une bdd

    ce qui permet de distinguer un fichier d'un autre c 'est son appartenance a un type de donnees.
    si type de donnée A alors structure du fichier 1
    etc...

    la contrainte est de faire un systeme suffisament ouvert pour que si demain on rajoute un type de donneé cela se fasse facilement

    voila.

    j'ai un bouquin sur les design pattern (ca ne m'est pas facile!!!) mais je pense que ce qu'il me faut c'est le pattern factory (?)
    qu'en pensez vous ?

    ensuite j'ai commence a developpez une interface via mvc mais pour un seul type de fichier car j'ai du mal a mettre en commun ce qu'il faut...

    merci d'avance si qqu'un peut m'aider

    n

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Bonjour,

    Si tu débutes dans la programmation objet, il n'est pas utile de t'embarrasser de la notion supplémentaire de design Pattern. Créés ton application comme tu le sens et ne t'obstine pas à vouloir introduire le MVC qui a une signification particulière et qui n'a a-priori aucune utilité dans ton cas.

    Pour en revenir à ton objectif, il semble qu'il y ait plusieurs façon de traiter un fichier en entrée, selon son type. Effectivement, une fabrique (factory) peut être utilisée pour choisir quel objet de traitement sera responsable du traitement du fichier. Dans l'idée :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Demande à la fabrique le bon objet de traitement
    FileManager fv = FileManagerFactory.getInstance("c:\coucou.tex");
    //valide le fichier
    fv.validate();
    //Stocke le fichier en BDD
    fv.store();
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Points : 97
    Points
    97
    Par défaut
    merci de ta reponse. je travaille toujours sur une solution possible.

    malheureusement je n'ai pas le chois, cela m'est demandée dans le cadre d'un stage...

    ce que j'ai fait jusqu'a present marche pour un seul cas : integration d'un fichier de type A.

    ce que je n'arrive pas à assimiler c'est comment imbriquer fabrique dans mon developpemnt :-(

    par exemple pour l'integration des fichiers j'ai un controleur qui gere les actions utilisateurs :

    formulaire de soumission : method=Fichier&action=upload

    dans cette partie de mon controleur, je fais une serie de tests (validation formulaire, ...) puis l'upload

    si l'upload c'est bien passé alors formulaire validation : method=Fichier&action=process

    dans cette partie de mon controleur, a nouveau je fais une serie de tests
    le fichier est-il valide par rapport à la structure attendue ? ....

    si oui alors je lance une procedure stockée ....

    ma question : a quel moment j'utilise la fabrique ? ou je met le code ?

    je sens bien que ce n'est pas comme ca qu'il faut faire puisque je vais a nouveau redevelopper certaines parties du code quand je vais traiter un fichier de type B, type C, ...

    j'aimerai faire un code propre, lisible et protable (si on rajoute un type par ex)

    merci d'avance, c'est peut etre tout bête quand on a l'habitude mais je cale..

    n

  4. #4
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par nine Voir le message
    formulaire de soumission : method=Fichier&action=upload
    Dans le contrôleur en question, tu dois mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Demande à la fabrique le bon objet de traitement
    FileManager fv = FileManagerFactory.getInstance(Fichier);
    //valide le fichier
    fv.validate();

    Citation Envoyé par nine Voir le message
    si l'upload c'est bien passé alors formulaire validation : method=Fichier&action=process
    Dans le contrôleur en question, tu dois mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Demande à la fabrique le bon objet de traitement
    FileManager fv = FileManagerFactory.getInstance(Fichier);
    //stocke le fichier en BDD
    fv.store();
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Points : 97
    Points
    97
    Par défaut
    merci je me penche sur l'ecriture de la fabrique a proprement dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Demande à la fabrique le bon objet de traitement
    FileManager fv = FileManagerFactory.getInstance(Fichier);
    //valide le fichier
    fv.validate();
    mais comment je decide du type de fichier a traiter (A,B,...) ?

    parce que c'est par rapport a ce type (de donnees) que je sais quelle validation je dois appliquer au fichier.

    encore merci!

    n

  6. #6
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Je vais te filer un coup de main.

    Tout d'abord, tu as besoin d'une interface FileManager, qui déclare les méthodes validate() et store() :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    interface FileManager {
       public boolean validate();
     
       public void store();
    }

    Ensuite pour chaque type de fichier différent (disons, A, B et C) tu dois créer une classe qui réalise l'interface FileManager et qui prend dans son constructeur un fichier du type idoine. Evidemment, l'intérêt se trouve dans le fait que chacune de ces classes a une façon différente d'implémenter les méthode validate() et store() :
    Code java : 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
     
    class AManager implements FileManager {
     
       File Afile;
     
       public AManager(File f) {
          this.Afile = f;
       }
     
       public boolean validate() {
        //code pour la validation sachant pertinemment que f est un fichier de type A
       }
     
       public void store() {
        //code pour l'insertion en BDD sachant pertinemment que f est un fichier de type A
       }
     
    }
     
    class BManager implements FileManager {
     
       File Bfile;
     
       public BManager(File f) {
          this.Bfile = f;
       }
     
       public boolean validate() {
        //code pour la validation sachant pertinemment que f est un fichier de type B
       }
     
       public void store() {
        //code pour l'insertion en BDD sachant pertinemment que f est un fichier de type B
       }
     
    }
     
    etc...

    Occupons-nous de la factory maintenant :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    class FileManager {
     
       public static FileManager getInstance(String fileName) {
     
           switch (fileName.getExtension()) 
           { 
              case 'a': return new AManager(new File(fileName));
              case 'b': return new BManager(new File(fileName));
              default: return null; 
           }
     
       }
     
    }
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Points : 97
    Points
    97
    Par défaut
    merci t'es un ange, c'est nettement plus clair !

    je crois que ca va aller maintenant, en modifiant legerement les choses car la taille des fichiers etant trop volumineuse (le plus petit pesant 500MO) j'ai decide de passer par des scripts shell pour valider le fichier (une commande awk/sed contre une boucle php, je gagne du temps...)


    si je change le parametre du constructeur de File f à string f :

    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
    class AManager implements FileManager {
     
       
     
       public AManager(string f) {
          this.Afile = f;
       }
     
       public boolean validate() {
        //code pour la validation sachant pertinemment que f est un fichier de type A
       }
     
       public void store() {
        //code pour l'insertion en BDD sachant pertinemment que f est un fichier de type A
       }
     
    }

    et pour la factory je passe l'id du type de donnée :

    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
    class FileManager {
     
       public static FileManager getInstance(Integer idType, String filename) {
     
           switch (idType) 
           { 
              case 1: return new AManager(fileName);
              case 2: return new BManager(fileName);
              default: return null; 
           }
     
       }
     
    }
    ca ne te choque pas ?

    ensuite dans le controleur je devrais faire qque chose comme ca (?) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Demande à la fabrique le bon objet de traitement
    FileManager fv = FileManagerFactory.getInstance(idType, monFichier);
    //valide le fichier
    fv.validate();
    ensuite je vois que pour l'instanciation tu utilises :

    FileManager fv = FileManagerFactory.getInstance...

    rajouter "Factory" est obligatoire ?

    encore merci,

    n

  8. #8
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par nine Voir le message
    ca ne te choque pas ?
    Non, ce n'est pas choquant. Il n'y as pas vraiment de règle précise. Le tout c'est que la fabrique se débrouille pour renvoyer le bon objet capable de traiter le fichier.

    Citation Envoyé par nine Voir le message
    ensuite dans le controleur je devrais faire qque chose comme ca (?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Demande à la fabrique le bon objet de traitement
    FileManager fv = FileManagerFactory.getInstance(idType, monFichier);
    //valide le fichier
    fv.validate();
    C'est exactement ca.

    Citation Envoyé par nine Voir le message
    ensuite je vois que pour l'instanciation tu utilises :

    FileManager fv = FileManagerFactory.getInstance...

    rajouter "Factory" est obligatoire ?
    C'est juste une convention de nommage pour se rappeler qu'il s'agit d'une fabrique.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Points : 97
    Points
    97
    Par défaut
    et bien merci a toi, je touche du doigt ce que je voulais.

    voir la lune et non le doigt qui la pointe c'est plus agreable...

    bonne soiree !

    n

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Débutant - Pattern MVC - couplage entre la vue et le controleur
    Par ben.IT dans le forum Design Patterns
    Réponses: 1
    Dernier message: 18/10/2010, 16h16
  2. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  3. Tutoriel : Implémentation du pattern MVC
    Par Ricky81 dans le forum MVC
    Réponses: 0
    Dernier message: 11/02/2008, 09h51
  4. Problème d'accessibilité avec le design patterns MVC
    Par radical_bombtracks dans le forum JSF
    Réponses: 5
    Dernier message: 24/07/2007, 13h15
  5. Pattern MVC et barre de progression
    Par Tiberizz dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 05/12/2006, 18h44

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