Tout d'abord, qu'est-ce que la dépendance ? Un objet dépend d'autres objets. Par exemple, var d=new Date(); signifie que d dépend de la création de l'objet Date. Deuxièmement, est-il préférable de dépendre. allumé ou pas ? non Afin d'obtenir un faible couplage du programme, il est préférable de minimiser l'interdépendance et les contraintes entre les composants. Par exemple, si un constructeur a été créé par d'autres, je peux l'appeler directement sans le recréer. Troisièmement, qu'est-ce que l'injection ? Cela signifie que l’objet que j’utilise actuellement a été donné par d’autres et a été créé passivement. Par exemple
Il n'y a pas de différence, juste des angles différents, ils font tous référence à la même chose. Pour faire simple, vous n'avez pas besoin de créer des objets vous-même, spring vous aidera à placer les objets là où vous en avez besoin
C’est juste une sublimation du modèle d’usine. Les principes de l'injection de dépendances et de l'inversion du code de contrôle sont la même chose, ils sont juste différents dans leur compréhension.
Ces termes sont vraiment trop avancés. En fait, ce ne sont que quelques applications de base orientées objet, qui ont dérouté de nombreux amis. C'est la même chose que le modèle de stratégie et le modèle d'usine.
Il n'y a essentiellement aucune différence entre l'injection de dépendances et l'inversion de contrôle, mais la perspective de décrire le problème est différente.
Inversion de contrôle : Qu'est-ce qui est inversé exactement ? La définition de Wikipédia est que l'acquisition d'objets dépendants est inversée. Les applications sont généralement composées de nombreux objets. De nombreuses autres classes doivent être utilisées dans une seule classe. Au départ, nous avons obtenu de manière proactive des instances d'autres classes via le nouveau mot-clé. Cela pose un problème : la relation d'appel de chaque classe est couplée.
Avec l'inversion de contrôle, il suffit d'attendre passivement que spring nous injecte l'instance de la classe, et nous pouvons l'utiliser directement.
Cela présente de nombreux avantages, comme la gestion centralisée des objets, pas besoin d'implémenter de nombreux singletons par vous-même, le découplage des relations d'appel des classes, etc.
Supposons qu'il y ait deux classes A et B. Si une instruction comme new B() est utilisée dans A, ajoutez une arête dirigée de B vers A. Un projet plus vaste peut comporter des milliers de classes, et le graphe orienté ainsi formé sera certainement extrêmement complexe. Si l’inversion de contrôle est utilisée, dans le cas le plus extrême, toutes nos classes deviendront des points indépendants.
Parce qu'il contrôle chaque bean, il peut également en dériver diverses fonctions puissantes. spring est basé sur IoC et AOP.
Il existe une classe de base de données db, qui a une méthode statique get_db() qui peut obtenir l'objet de connexion à la base de données. Il existe également une classe post qui doit faire fonctionner la base de données, et elle a une méthode get_post() qui doit interroger la base de données. La connexion à la base de données étant une opération publique, la classe post ne veut pas se reconnecter à la base de données en interne pour éviter le couplage. La classe post fournit donc une méthode set_db() pour obtenir l'objet de connexion à la base de données. db:: get_db() est passé dans la classe post en tant que paramètre de la méthode set_db() de la classe post.
<?php
class db {
public static function get_db() {
return new mysqli('127.0.0.1','user','pass','dbname',3306);
}
}
class post {
private $db;
public function set_db($db){
$this->db = $db;
}
public function get_post($id){
return $this->db->query('SELECT * FROM post WHERE id ='.intval($id));
}
}
$post = new post();
$post->set_db( db::get_db() ); //注入post类依赖的数据库连接对象
var_export( $post->get_post(1024) );
En comparant la méthode d'écriture ci-dessous, vous pouvez comprendre que l'injection de dépendances est en fait un patch pour certains langages complètement POO.
<?php
function db() {
static $db;
if ($db) {
return $db;
} else {
$db = new mysqli('127.0.0.1','user','pass','dbname',3306);
return $db;
}
}
function get_post($id) {
$db = db();
return $db->query('SELECT * FROM post WHERE id ='.intval($id))->fetch_all();
}
Les choses qui ont été écrites sont prêtes à l'emploi !
Tout d'abord, qu'est-ce que la dépendance ? Un objet dépend d'autres objets. Par exemple, var d=new Date(); signifie que d dépend de la création de l'objet Date.
Deuxièmement, est-il préférable de dépendre. allumé ou pas ? non Afin d'obtenir un faible couplage du programme, il est préférable de minimiser l'interdépendance et les contraintes entre les composants. Par exemple, si un constructeur a été créé par d'autres, je peux l'appeler directement sans le recréer.
Troisièmement, qu'est-ce que l'injection ? Cela signifie que l’objet que j’utilise actuellement a été donné par d’autres et a été créé passivement. Par exemple
Il n'y a pas de différence, juste des angles différents, ils font tous référence à la même chose. Pour faire simple, vous n'avez pas besoin de créer des objets vous-même, spring vous aidera à placer les objets là où vous en avez besoin
C’est juste une sublimation du modèle d’usine.
Les principes de l'injection de dépendances et de l'inversion du code de contrôle sont la même chose, ils sont juste différents dans leur compréhension.
Ces termes sont vraiment trop avancés. En fait, ce ne sont que quelques applications de base orientées objet, qui ont dérouté de nombreux amis.
C'est la même chose que le modèle de stratégie et le modèle d'usine.
Vous pouvez vous référer à : http://www.nowcoder.com/questionTerminal/3be16186465a453f876729acd2e46ddf
Il n'y a essentiellement aucune différence entre l'injection de dépendances et l'inversion de contrôle, mais la perspective de décrire le problème est différente.
Inversion de contrôle :
Qu'est-ce qui est inversé exactement ? La définition de Wikipédia est que l'acquisition d'objets dépendants est inversée.
Les applications sont généralement composées de nombreux objets. De nombreuses autres classes doivent être utilisées dans une seule classe. Au départ, nous avons obtenu de manière proactive des instances d'autres classes via le nouveau mot-clé. Cela pose un problème : la relation d'appel de chaque classe est couplée.
Avec l'inversion de contrôle, il suffit d'attendre passivement que spring nous injecte l'instance de la classe, et nous pouvons l'utiliser directement.
Cela présente de nombreux avantages, comme la gestion centralisée des objets, pas besoin d'implémenter de nombreux singletons par vous-même, le découplage des relations d'appel des classes, etc.
Supposons qu'il y ait deux classes A et B. Si une instruction comme
new B()
est utilisée dans A, ajoutez une arête dirigée de B vers A. Un projet plus vaste peut comporter des milliers de classes, et le graphe orienté ainsi formé sera certainement extrêmement complexe. Si l’inversion de contrôle est utilisée, dans le cas le plus extrême, toutes nos classes deviendront des points indépendants.Parce qu'il contrôle chaque bean, il peut également en dériver diverses fonctions puissantes.
spring est basé sur IoC et AOP.
Il existe une classe de base de données db, qui a une méthode statique get_db() qui peut obtenir l'objet de connexion à la base de données.
Il existe également une classe post qui doit faire fonctionner la base de données, et elle a une méthode get_post() qui doit interroger la base de données.
La connexion à la base de données étant une opération publique, la classe post ne veut pas se reconnecter à la base de données en interne pour éviter le couplage.
La classe post fournit donc une méthode set_db() pour obtenir l'objet de connexion à la base de données.
db:: get_db() est passé dans la classe post en tant que paramètre de la méthode set_db() de la classe post.
En comparant la méthode d'écriture ci-dessous, vous pouvez comprendre que l'injection de dépendances est en fait un patch pour certains langages complètement POO.