Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1183 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Design pattern IoC

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Design pattern IoC

n°2021247
pharaon200​5
Par Osiris et par Apis
Posté le 05-09-2010 à 13:20:22  profilanswer
 

Hello les amis,
 
Quelqu'un peut-il expliquer le design pattern IoC (injection of control) ?
 
De même la différence entre l'injection de contrôle et l'injection de dépendance ?
 
 :jap:  

mood
Publicité
Posté le 05-09-2010 à 13:20:22  profilanswer
 

n°2021250
exhortae
Membre du Cartel des Médecins
Posté le 05-09-2010 à 14:22:37  profilanswer
 

IOC Inversion of control

 

Un très bon article :

 

http://dotnetslackers.com/articles [...] Part1.aspx

Message cité 1 fois
Message édité par exhortae le 05-09-2010 à 14:23:10
n°2021255
pharaon200​5
Par Osiris et par Apis
Posté le 05-09-2010 à 16:00:58  profilanswer
 

exhortae a écrit :

IOC Inversion of control
 
Un très bon article :
 
http://dotnetslackers.com/articles [...] Part1.aspx


 
C'est le topic java. Donc j'aimerai bien des exemple java pas .NET, comme avec spring & co.
 
oust les crosofts :)

n°2021256
Elmoricq
Modérateur
Posté le 05-09-2010 à 16:06:06  profilanswer
 

Hm. Peu importe (ou presque) le langage lorsque la discussion porte sur les design patterns.

n°2021257
el muchach​o
Comfortably Numb
Posté le 05-09-2010 à 17:00:04  profilanswer
 

Ca sert à faciliter le remplacement de services par d'autres services, et en particulier par des Mocks pour le test.

 

Exemple: tu écris un client qui appelle deux services quelconques

Code :
  1. public class ZeClient {
  2.   private DbManagerInterface dbMgr;
  3.   private ExternalServiceInterface extService;
  4. }
 

Sans IoC, ta classe client va instancier elle-même dbMgr et extService (via des Factory par ex).
Avec IoC, l'instanciation se fait en-dehors de ta classe.
Celle-ci ne va que conserver les instances existantes déjà créées. On injecte ces instances via le constructeur ou via des setters

 
Code :
  1. public class ZeClient {
  2.   private DbManagerInterface dbMgr;
  3.   private ExternalServiceInterface extService;
  4.  
  5.  public ZeClient(DbManagerInterface dbMgr, ExternalServiceInterface extSrv){
  6.      this.dbMg= dbMgr;
  7.      this.extService = extSrv;
  8.  }
  9.  
  10.  public void setExtService(ExternalServiceInterface extSrv) {
  11.      this.extSrv = extSrv;
  12.  }
  13.  
  14.  public void setDbMgr(DbManagerInterface dbMgr) {
  15.      this.dbMgr = dbMgr;
  16.  }
  17. }
 

Il faut imaginer que dans une vraie application, ma classe ZeClient peut avoir facilement 5 ou 6 services (voire bcp plus), qui eux-mêmes appellent plusieurs services.
Du coup, dans une classe de test, quand j'instancie ZeClient, j'instancie au préalable tout l'arbre de dépendances des services dont il dépend potentiellement (même si dans mon test, je n'en utilise en réalité qu'un seul). Ca a deux inconvénients:
1. ZeClient embarque avec lui tous les services qu'il instancie. Sauf à modifier un fichier de mapping interface<->implémentation, on ne peut pas changer les services dbMgr et extService sans avoir à modifier le code de ZeClient.
2. Pour un test qui se veut unitaire de ZeClient, je suis obligé de créer tout l'univers: certains services, avant d'être utilisables, peuvent être pénibles à configurer, par ex, pour une base de donnée et un service externe, il faut préalablement que la base et le service en question existent sur le réseau et répondent correctement. Pour peu que chacun des services que ZeClient utilise appelle lui-même d'autres services, il faut tout configurer et il faut que tout fonctionne avant même de pouvoir lancer le moindre test. On ne fait plus de l'unitaire, mais de l'intégration, alors qu'on voudrait pouvoir juste les mocker pour retourner une valeur donnée quelconque.
Avec IoC, parce que ZeClient n'instancie plus rien lui-même, on peut créer les mocks, les instancier soi-même, et les injecter via le constructeur ou les setteurs.


Message édité par el muchacho le 05-09-2010 à 17:18:19

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2021259
pharaon200​5
Par Osiris et par Apis
Posté le 05-09-2010 à 17:44:02  profilanswer
 


Ok, donc IoC sert principalement à instancier des objets et les initialiser dans les attributs d'une classe. On peut aussi faire des Mocks pour les tests grace à IoC.
Si je dis ca en entretien, ca risque de faire léger.
 
Et sinon quelle différence avec Injection de Dépendance ?

n°2021296
exhortae
Membre du Cartel des Médecins
Posté le 05-09-2010 à 23:15:30  profilanswer
 

pharaon2005 a écrit :


 
C'est le topic java. Donc j'aimerai bien des exemple java pas .NET, comme avec spring & co.
 
oust les crosofts :)


 
Cet exemple explique clairement la différence entre ioc et injection de dépendances, si je l'ai donné c'est parce qu’il te permettra à coup sûr de la comprendre sans trop de prise de tête (15-20 minutes de lecture).

n°2021299
el muchach​o
Comfortably Numb
Posté le 06-09-2010 à 00:10:44  profilanswer
 

pharaon2005 a écrit :


Ok, donc IoC sert principalement à instancier des objets et les initialiser dans les attributs d'une classe. On peut aussi faire des Mocks pour les tests grace à IoC.
Si je dis ca en entretien, ca risque de faire léger.
 
Et sinon quelle différence avec Injection de Dépendance ?


Si c'est juste pour passer un entretien, oublie, c'est pas comme ça que tu vas faire illusion. Ca sert à rien de tenter de faire croire qu'on sait, au contraire, ça fait particulièrement mauvais effet. D'ailleurs, ta question montre que tu n'as pas compris grand chose...


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2021413
phnatomass
Je m'empare de ton esprit !!
Posté le 06-09-2010 à 14:32:37  profilanswer
 

pharaon2005 a écrit :


Et sinon quelle différence avec Injection de Dépendance ?


L'injection de dépendance est un des pattern pour implémenter l'inversion de contrôle.  [:tartalap]

n°2022443
pharaon200​5
Par Osiris et par Apis
Posté le 11-09-2010 à 23:08:27  profilanswer
 

Bon je crois que j'ai pijé.

 

IoC = Inversion de contrôle = principe d'Hollywood "Ne m'appelez pas, c'est moi qui vous appelle"
En général c'est l'application qui appelle le framework, et bien dans IoC c'est le framework qui appelle l'application. Les rôles sont inversés.
C'est Spring qui se charge de la mise en relation des objets, et non les objets qui utilisent le framework pour se mettre en relation.

 

Injection de dépendance = découplage des objets
A utilise (dépend de) B -> couplage fort entre A et B
B est injecté dans A -> couplage faible entre A et B
Dans l'injection de dépendance Spring, c'est le framework qui s'occupe d'instancier B et de l'injecter dans A.

 

[:zinbou]

 


Message édité par pharaon2005 le 11-09-2010 à 23:11:45

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Design pattern IoC

 

Sujets relatifs
PAttern.matches comment autoriser que les chiffres et un point ?question de design
Recherche du bon pattern regex avec mysqlDesign Pattern Memento
Design défilementSite Web avec design du type www.sous-titres.eu
problème SGBD avec win'designPattern d'une relations de dépendance
[SQL] Design table "réseau social" 
Plus de sujets relatifs à : Design pattern IoC


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR