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 :

injection de dépendance


Sujet :

Design Patterns

  1. #1
    Rédacteur/Modérateur

    Avatar de dsr57
    Homme Profil pro
    Analyste programmeur senior
    Inscrit en
    octobre 2003
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyste programmeur senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2003
    Messages : 1 132
    Points : 4 799
    Points
    4 799
    Billets dans le blog
    22
    Par défaut injection de dépendance
    Bonjour à tous,

    Je cherchais des informations sur le l'injection de dépendance et je suis tombé sur ce très bon tutoriel : Injection de dépendances en .NET, pattern, intérêt et outils et en continuant mes recherches sur internet j'ai vu qu il existait également :
    • injection par interface ;
    • injection par champs.


    Pour l'injection par interface, si j'ai bien compris la différence avec l'injection par constructeur c'est dans la signature du constructeur on passe un paramètre de type interface au lieu d'un paramètre de type classe, ma compréhension est elle correcte ?
    En revanche pour l'injection par champs, je n'ai trouvé aucune explication m’amenant a une compréhension, est ce que quelqu’un pourrais me donner plus de détails dessus ?

    Merci par avance
    ------------------------------------------------------------------------------------------------------------------------------------------
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag
    ------------------------------------------------------------------------------------------------------------------------------------------
    Site perso : Formation, Expérience, Réalisations, ...
    Blog : Le Blog de DSR57 - Programmation WinDev

  2. #2
    Membre émérite
    Inscrit en
    janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : janvier 2011
    Messages : 805
    Points : 2 930
    Points
    2 930
    Par défaut
    Hello,

    Je ne connais qu'un autre type d'injection, qui est l'injection par méthode : tu passes la dépendance dans la méthode qui en a besoin au moment de l'appel de celle-ci, et la dépendance ne reste pas dans l'objet, elle est transitoire.

    "Injection par interface" est plus ou moins sous-entendu de nos jours quand tu fais de l'IoC. D'ailleurs, dans le tuto c'est bien précisé à la fin de la section I :

    En d'autres termes, on va, dans un premier temps, définir un jeu d'interfaces de façon à ce que nos différents modules puissent communiquer par un contrat.
    C'est pour ça qu'on parle de "résolution" à propos des conteneurs IoC : résoudre une dépendance, c'est, à partir d'une interface, déterminer quel type concret instancier pour en injecter une instance ensuite. C'est une composante essentielle de l'inversion de contrôle : non seulement on ne laisse pas à l'objet final le contrôle sur l'instanciation de ses dépendances, mais on ne le laisse pas non plus connaitre le type concret de cette dépendance. Cela permet principalement de ne pas avoir à modifier le code de la classe consommatrice quand une particularité de sa dépendance change, et d'appliquer le principe de séparation des responsabilités : on abstrait les détails d'implémentation qui ne concernent pas la classe cliente.

    Sur "l'injection par champ", j'imagine qu'il s'agit de mettre la dépendance dans un champ de l'objet au lieu de passer par un setter ?

    • S'il s'agit d'un champ public, j'ai du mal à voir l'intérêt par rapport à un setter, et ça viole l'encapsulation de l'objet.

    • Normalement, les champs privés ou protected sont inaccessibles depuis l'extérieur. Certains conteneurs d'IoC doivent pouvoir contourner ça avec de la reflection ou du proxying, mais je ne vois pas trop l'intérêt. En effet, cela interdira à quiconque d'injecter la dépendance par la voie normale. On se retrouve avec une classe qui a besoin de certaines dépendances pour fonctionner mais sur laquelle on ne donne aucun point d'entrée pour les injecter - ça ne marchera qu'avec des moyens détournés.

Discussions similaires

  1. [EJB3] [JBoss] Injection de dépendance circulaire ?
    Par Claythest dans le forum Java EE
    Réponses: 6
    Dernier message: 04/08/2009, 09h11
  2. [Framework] Injection de dépendances ; comment se passer du XML ?
    Par ummon99 dans le forum Spring
    Réponses: 3
    Dernier message: 12/01/2008, 10h19
  3. [EJB3] Injection de dépendance et Stateful
    Par newbeewan dans le forum Java EE
    Réponses: 1
    Dernier message: 15/05/2007, 08h33
  4. [Integration] [EasyMock] Injection de dépendance à l'éxécution
    Par frangin2003 dans le forum Spring
    Réponses: 2
    Dernier message: 06/03/2007, 12h06
  5. Spring + TagSupport et injection de dépendance
    Par worldchampion57 dans le forum Spring Web
    Réponses: 2
    Dernier message: 26/02/2007, 10h01

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