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

Langage Java Discussion :

Instance avec deux implémentations possible


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Par défaut Instance avec deux implémentations possible
    Bonsoir à tous,

    j'ai une question de conception pour un programme et je ne sais pas comment m'y prendre...

    en fait j'ai une partie de mon code qui instancie un Objet de type ObjetGenerique, et selon un paramètre de config (mode DEV ou PROD) j'aimerais que cet objetGenerique puisse insancier une implémentation différente.

    En mode DEV j'utilise des méthodes "bouchon" pour ma valid, et en mode PROD j'utilise les méthodes "officielles" pour avoir un comportement complet de mon programme.

    donc pour ce faire, je me suis penché sur une interface ObjetGenerique qui a deux implementation, ObjetModeDev et ObjetModeProd, par contre je ne sais pas comment avoir un code générique en amont qui serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     mon_objet = new ObjetGenerique();
    et que en fonction de mon paramètre aille utiliser l'une ou l'autre implémentation.

    j'espère avoir été clair...
    avez vous une idée ?

    Merci,
    Tiamat.

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    fais une recherche sur le site ou sur le net avec Pattern Factory.
    Il s'agit d'un pattern d'instanciation de classes qui te sera utile. Tu te retrouveras au final avec un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetGenerique o = OFactory.getObject();
    Ensuite t'auras juste à modifier soit ta méthode statique getObject() pour qu'elle te retourne une instance de la classe que tu veux. Ou encore, tu lui passes un paramètre pour définir si t'es en mode prod ou dev.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static ObjetGenerique getObject(int mode) {
    if(mode = 0) {
    return new ObjetDev ;
    }
    return new ObjetPro;
    }
    D'autre part, es-tu sûr que tu n'as pas des choses en commun pour tes 2 types objets, il y a de fortes chances qu'une classe abstraite soit plus appropriée, mais je n'ai pas vu ton code.
    Tu peux aussi jeter un coup d'oeil au pattern décorateur (décoration) mais la Factory devrait te suffire.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Par défaut
    Salut Djakisback,

    merci de ta réponse et effectivement le Pattern Fctory semble être la solution pour moi !
    en ce qui concerne ta question sur la classe abstract, effectivement ça pourrait effectivement être une solution pour mon problème.

    J'ai trouvé un tuto sur les Design Pattern sur notre cher site developpez.com

    Je jette un coup d'oeil et je voit ensuite ce qui est le plus approprié.

    Merci en tout cas du coup de pouce !

    A Bientot,
    Tiamat.

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    En fait, quand je parlais de classe abstraite, je voulais dire que ce serait plus approprié qu'une interface. En revanche, ça ne résoudra pas ton problème ^^

  5. #5
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Pour le décorator je pense que c'est une très mauvaise solution, ca provoquerais de biens trop grand changements pour basculer entre dev/prod.

    Pour la factory (voir une abstract factory), même si techniquement ca répondrait très bien au problème, je pense que c'est également une mauvaise solution.

    En fait, utiliser une factory provoquerait :
    1/ une prolifération des classes inutile.
    2/ une dégradation (même mineure) des perfs.
    3/ trvailler inutilement (oui on est faignant )

    Généralement, on fait un module de test, que l'on run pour effectuer divers tests (lequels pourront utiliser junit si besoin il y a) au lieu de run l'application proprement dite.
    Dans la pratique ca se traduit souvent par un script ant qui qui aura au moins deux target :
    * make-test (ou make-dev)
    * release

    En fonction de la target, on construira les sources à compiler à partir de fichiers dans des arborescences différentes.

    Cette solution à l'avantage de :
    1/ ne pas toucher ton code existant
    2/ aucun changement au niveau des perfs
    3/ au lieu de coder/mettre en place des factories (voir des abstract factories), on fera du XML.

    Pour finir, il y a toutes les chances que ton IDE intègre directement l'éxecution de script ant.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Par défaut
    Salut Alain Defrance,

    effectivement j'utilise déjà Ant pour builder mon projet donc je vais également voir cette solution, en mettant une option de compil de Build qui me permettra de sélectionner une implémentation de mon interface ou une autre.

    Mais c'est tout à fait le but de ce mode Dev, pour lancer une valid sur une partie du code bien particulière sans lancer une partie spécifique qui utilise une communication USB (et donc a sa propre campagne de valid).

    Merci pour ces infos précieuses.
    Tiamat.

  7. #7
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Effectivement, je n'ai pas réfléchi au problème de fond

  8. #8
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Mais c'est tout à fait le but de ce mode Dev, pour lancer une valid sur une partie du code bien particulière sans lancer une partie spécifique qui utilise une communication USB (et donc a sa propre campagne de valid).
    Je pense que tu as séché tes cours sur les tests unitaires et les mock objects.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Par défaut
    lol c'est pas faux mais pas vraiment le problème...
    c'est juste d'agencer mon code pour avancer à la fois sur mes tests et à la fois sur la valid. la com USB est un peu lente et je pense que je pourrais accélérer tout ça.

    bon j'avoue quand même qu'au niveau tests unitaires et Mocks je pêche un peu ! si vous avez deux trois tutos qui peuvent m'aider je suis preneur !

  10. #10
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    mais pas vraiment le problème...
    D'après ce que je comprends, c'est le problème. Tu utilises un bout de code faisant un accès usb. Si tu masques ce code via une interface, tu peux alors créer dans tes tests unitaires un mock qui simule le comportement de l'accès usb, sans réellement le faire.
    Il y a de très bons cours sur le site à ce sujet.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 139
    Par défaut
    Merci Patrirarch24, j'ai commendé à implémenter mes tests JUnit en me basant sur un mock pour simuler mes accès USB.

    merci à tous
    Tiamat.

  12. #12
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    chut ne le divulguez pas: il y a aussi un horrible "hack" pour faire ça:
    une assertion avec un effet de bord qui passe la main à un objet Proxy. Quand les assertions sont activées on appelle une méthode (qui rend toujours true) mais qui remplace l'objet cible par un Proxy (dynamique ou pas) .....
    la dite méthode peut être sophistiquée au point de consulter un fichier de configuration, etc....

  13. #13
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    chut ne le divulguez pas: il y a aussi un horrible "hack" pour faire ça:
    une assertion avec un effet de bord qui passe la main à un objet Proxy. Quand les assertions sont activées on appelle une méthode (qui rend toujours true) mais qui remplace l'objet cible par un Proxy (dynamique ou pas) .....
    la dite méthode peut être sophistiquée au point de consulter un fichier de configuration, etc....

  14. #14
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    En un mot : Guice.

  15. #15
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Ouaip l'ioc est un moyen de solutionner le problème, si l'on accepte la dépendance vers un framework supplémentaire.

Discussions similaires

  1. fonction membre avec deux instances de la classe
    Par tanguy.L dans le forum Débuter
    Réponses: 0
    Dernier message: 24/06/2010, 11h33
  2. Réponses: 0
    Dernier message: 10/06/2010, 09h04
  3. Connexion sur deux instances avec Perl:DBI
    Par karbox dans le forum Requêtes
    Réponses: 1
    Dernier message: 09/06/2010, 14h53
  4. Réponses: 3
    Dernier message: 27/06/2008, 13h57
  5. Deux instances avec le même nom.
    Par Denn's dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/03/2008, 09h09

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