717 votes

Inversion de contrôle vs Injection de dépendance

Selon le journal écrit par Martin Fowler: http://martinfowler.com/bliki/InversionOfControl.html , l'inversion de contrôle est le principe selon lequel le flux de contrôle d'un programme est inversé: au lieu de cela, le programmeur qui contrôle le débit d'un programme, les sources externes (cadre, les services, les autres composants) d'en prendre le contrôle. Il aime nous brancher quelque chose en quelque chose d'autre. Il a cité l'exemple sur les EJB 2.0:

Par exemple, la Session Bean interface définit ejbRemove, ejbPassivate (stockées au stockage secondaire), et ejbActivate (restauré à partir de passif de l'état). Vous n'obtenez pas de contrôle lors de la ces méthodes sont appelées, juste ce qu' ils le font. Le conteneur appelle nous, nous ne pas l'appeler.

Cela conduit à la différence entre le cadre et la bibliothèque:

L'Inversion de Contrôle est un élément clé de ce qui fait un cadre différent à un de la bibliothèque. Une bibliothèque est essentiellement un ensemble de fonctions que vous pouvez appeler, ces jours généralement organisés en des classes. Chaque appel fait un peu de travail et retourne le contrôle au client.

Je pense que, du point de vue DI CIO, signifie la dépendance d'un objet est inversé: au lieu de cela, il contrôle ses propres dépendances, cycle de vie... quelque chose d'autre le fait pour vous. Mais, comme vous m'avez dit à propos de DI par les mains, la DI n'est pas nécessaire CIO. Nous pouvons encore avoir DI et pas du CIO.

Toutefois, dans le présent document (à partir de la pococapsule, un autre CIO Cadre pour le C/C++), il suggère qu'en raison de la COI et DI, le CIO conteneurs et DI cadres sont beaucoup plus supérieure à J2EE, depuis J2EE mixe le cadre du code dans les composants, donc de ne pas en faire Plain Old Java/C++ Objet (POJO/POCO).

L'Inversion de Contrôle des Conteneurs autres que l'Injection de Dépendance modèle: http://www.pocomatic.com/docs/whitepapers/ioc-vs-di/

Lecture supplémentaire à comprendre quel est le problème avec les vieux Composante de Base du Cadre de Développement, ce qui conduit à la deuxième document ci-dessus: Pourquoi et que faire de l'Inversion de Contrôle: http://www.pocomatic.com/docs/whitepapers/ioc/

Ma Question: Quel est exactement CIO et DI? Je suis confus. Basé sur pococapsule, CIO est quelque chose de plus important que de simplement inverser le contrôle des objets ou entre les programmeurs et les cadres.

821voto

Garrett Hall Points 11902

Le cio est un terme générique signifiant plutôt que d'avoir l'application d'appeler les méthodes dans un cadre, le cadre des appels d'implémentations fournies par l'application.

DI est une forme de Cio, où les implémentations sont passé dans un objet via les constructeurs/setters/service de look-ups, dont l'objet 'dépend' de façon à se comporter correctement.

Cio sans l'aide de DI, par exemple, serait le Modèle de modèle, parce que la mise en œuvre ne peut être changé par le biais de sous-classement.

DI Cadres sont conçus pour rendre l'utilisation de DI et peut définir des interfaces (ou les Annotations en Java) pour le rendre facile à passer dans les implémentations.

Cio Conteneurs sont DI cadres qui peuvent travailler à l'extérieur du langage de programmation. Dans certains, vous pouvez configurer les implémentations à l'utilisation de fichiers de métadonnées (par exemple, XML) qui sont moins invasive. Avec certaines personnes, vous pouvez faire du Cio qui est normalement impossible, comme injecter de la mise en œuvre au pointcuts.

Voir aussi http://martinfowler.com/articles/injection.html#InversionOfControl

282voto

Thomas Jaskula Points 5914

En bref, le Cio est un beaucoup de terme plus large qui inclut, mais n'est pas limité à, DI

Le terme " Inversion de Contrôle (IoC) signifiait à l'origine de toute sorte de style de programmation où un ensemble cadre de l'exécution ou de temps contrôlé le déroulement du programme

Avant de DI eu un nom, les gens ont commencé à se référer à des cadres de gérer les Dépendances comme l'Inversion de Contrôle des Conteneurs, et bientôt, le sens de la Coi progressivement dérivé vers ce sens précis: l'Inversion de Contrôle sur les Dépendances.

Ce que je comprends :

L'Inversion de Contrôle (IoC) signifie que les objets ne pas créer d'autres objets sur lesquelles ils s'appuient pour faire leur travail. Au lieu de cela, ils obtiennent les objets dont ils ont besoin à partir d'une source externe (par exemple, un fichier de configuration xml).

L'Injection de dépendance (DI) signifie que c'est fait, sans que l'objet de l'intervention, le plus souvent par un cadre de la composante qui passe les paramètres du constructeur et de définir les propriétés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X