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

Spring Java Discussion :

Changer l'implémentation en fonction de la configuration


Sujet :

Spring Java

  1. #1
    Invité
    Invité(e)
    Par défaut Changer l'implémentation en fonction de la configuration
    Bonjour,

    Nous sommes confrontés à un soucis de plus en plus récurent et ne trouvons aucune réponses claires.

    La situation est la suivante :
    Nous développons dans une architecture SOA dans laquelle chaque service est décrits par une interface. Nous retrouvons à chaque fois trois implémentations de celle-ci :
    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
     
    public interface Service {
       // ...
    }
     
    public class ServiceMock implements Service {
       // ...
    }
     
    public class ServiceImpl implements Service {
       /**
        * @param Service the remote service create by Spring remote
        */
       public ServiceImpl(Service serviceRemote) {
          // ...
       }
     
       // ...
    }
     
    public class ServiceProxy implements Service {
       public ServiceImpl(String mokOrImpl, Service serviceImpl, Service serviceMock) {
          if ( "mock".equals(mockOrImpl) ) {
             this.delegate = serviceMock;
          } else {
             this.delegate = serviceImpl;
          }
       }
     
       // ...
    }
    Au final, une classe business qui à besoin de se service se voit injecter le Service (qui est toujours le proxy).



    Tout ceci est mis en place pour utiliser l'implémentation ou le mock en fonction d'un paramètre de configuration qui est injecté ("String mockOrImpl" de ServiceProxy).
    Evidemment ce n'est pas une très bonne solution care elle implique que les deux implémentations "Mock" et "Impl" soient toujours instanciées alors que seulement une seras utilisée. Il y à aussi beaucoup de code dupliqué et de méthodes qui se contentent de déléguer à une autre implémentation.


    La question :
    Y à t'il un moyen plus simple d'utiliser l'une ou l'autre implémentation en utilisant Spring ? Nous supposons que oui (sans quoi l'avantage de Spring IOC est assez faible) mais personne (en interne) ne sais comment faire.
    Notre objectif est de passer à un schéma plus simple ou l'unité business reçoit l'implémentation directe qui est soit le mock soit un remote généré par Spring.



    Merci
    Dernière modification par mlny84 ; 01/12/2012 à 20h16. Motif: Conversion du préfixe

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 250
    Points : 403
    Points
    403
    Par défaut
    Si le paramètre "mockOrImpl" est déterminé au runtime, soit tu crées une FactoryBean ce qui est à peu près ce que tu faits, soit tu faits ton injection avec AspectJ, je ne vois pas d'autres solutions.(ex: AOP@Work: Dependency injection with AspectJ and Spring)
    Par contre si tu utilises soit du mock soit du impl indépendemment du runtime, il suffit de créer deux fichiers de configuration et de charger soit l'un soit l'autre.

  3. #3
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    je me suis abonné au sujet car je trouvais la problématique intéressante, et aussi la question bien posé donc si tu a le temps Blaise j'aimerais bien que tu apporte ta solution
    merci d'avance

Discussions similaires

  1. Réponses: 19
    Dernier message: 12/12/2007, 15h00
  2. [MySQL] Implémenter une fonction de recherche approximative
    Par Chromatic dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/02/2006, 11h54
  3. Changer d'image en fonction des options d'un formulaire
    Par Pouzy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/01/2006, 15h21
  4. [FOP] Changer le bckground en fonction d'une donnée
    Par lasconic dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/02/2005, 16h59
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19

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