Maison >Problème commun >Que signifie l'inversion du contrôle ?

Que signifie l'inversion du contrôle ?

Guanhui
Guanhuioriginal
2020-06-28 17:40:228272parcourir

L'inversion de contrôle est un principe de conception en programmation orientée objet. Elle peut être utilisée pour réduire le couplage entre des codes informatiques. Elle peut également utiliser l'inversion de contrôle pour permettre aux objets d'être contrôlés par un contrôleur lorsqu'ils le sont. créées. Les entités externes de tous les objets du système transmettent des références aux objets dont elles dépendent.

Que signifie l'inversion du contrôle ?

L'inversion de contrôle (en abrégé IoC) est un principe de conception en programmation orientée objet qui peut être utilisé pour réduire le nombre d'erreurs entre les codes informatiques. d'accouplement. La méthode la plus courante est appelée Dependency Injection (DI), et l'autre méthode est appelée "Dependency Lookup". Par inversion de contrôle, lorsqu'un objet est créé, une entité externe qui contrôle tous les objets du système lui transmet la référence de l'objet dont elle dépend. On peut aussi dire que des dépendances sont injectées dans l'objet.

Stratégie de mise en œuvre d'inversion du contrôle

L'IoC est un grand concept et peut être mis en œuvre de différentes manières. Il existe deux formes principales :

Recherche de dépendances : le conteneur fournit des interfaces de rappel et des conditions contextuelles aux composants. EJB et Apache Avalon utilisent cette approche. De cette manière, le composant doit utiliser l'API fournie par le conteneur pour rechercher des ressources et des objets collaboratifs. La seule inversion de contrôle se reflète uniquement dans ces méthodes de rappel (c'est-à-dire le type 1 mentionné ci-dessus) : le conteneur appellera ces méthodes de rappel. , Cela permet au code d'application d'obtenir des ressources pertinentes.

Injection de dépendances : le composant n'effectue pas de requêtes de positionnement et fournit uniquement des méthodes Java ordinaires permettant au conteneur de déterminer les dépendances. Le conteneur est seul responsable de l'assemblage des composants. Il transmettra les objets qui répondent aux dépendances aux objets requis via les propriétés ou les constructeurs JavaBean. La pratique consistant à injecter des dépendances via les propriétés JavaBean est appelée Setter Injection ; la pratique consistant à transmettre des dépendances en tant que paramètres de constructeur est appelée Constructor Injection

Réflexion de contrôle Transfert vers la méthode d'implémentation

Implémenter la couche d'accès aux données

La couche d'accès aux données a deux objectifs. La première consiste à extraire le moteur de base de données de l'application afin que la base de données puisse être modifiée à tout moment, par exemple de Microsoft SQL à Oracle. Cependant, cela est rarement fait dans la pratique, et il n’existe ni raison ni capacité suffisante pour reconstruire les applications existantes en utilisant la couche d’accès aux données.

Le deuxième objectif est d'abstraire le modèle de données de l'implémentation de la base de données. Cela permet de modifier la base de données ou le code selon les besoins tout en n'affectant qu'une petite partie de l'application principale : la couche d'accès aux données. Cet objectif mérite la refactorisation nécessaire pour l’implémenter dans les systèmes existants.

Refactoring de modules et d'interfaces

Une idée centrale derrière l'injection de dépendances est le principe de responsabilité unique. Ce principe stipule que chaque objet doit avoir un objectif spécifique et que les différentes parties de l'application qui doivent exploiter cet objectif doivent utiliser des objets appropriés. Cela signifie que ces objets peuvent être réutilisés n'importe où dans le système. Mais ce n’est pas le cas dans de nombreux systèmes existants.

Ajouter des tests unitaires à tout moment

Encapsuler des fonctions dans l'objet entier rendra les tests automatiques difficiles, voire impossibles. Cette refactorisation permet des tests unitaires plus avancés en isolant les modules et les interfaces d'objets spécifiques. Il est tentant de continuer à refactoriser un module avec l'idée d'ajouter des tests plus tard, mais c'est une erreur.

Utilisez le localisateur de service au lieu de l'injection de constructeur

Il existe plusieurs façons de réaliser une inversion de contrôle. L'approche la plus courante consiste à utiliser l'injection de constructeur, qui nécessite que toutes les dépendances logicielles soient fournies lors de la première création de l'objet. Cependant, l'injection de constructeur suppose que l'ensemble du système utilise ce modèle, ce qui signifie que l'ensemble du système doit être refactorisé simultanément. C'est difficile, risqué et prend du temps.

Tutoriel recommandé : "PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn