Maison  >  Questions et réponses  >  le corps du texte

angular.js - 如何通俗易懂的解释“依赖注入”?

如何通俗易懂的解释“依赖注入”?另外,依赖注入和控制反转有区别吗?具体是什么区别?

ringa_leeringa_lee2687 Il y a quelques jours878

répondre à tous(7)je répondrai

  • 黄舟

    黄舟2017-05-15 17:06:27

    Les choses qui ont été écrites sont prêtes à l'emploi !

    répondre
    0
  • 世界只因有你

    世界只因有你2017-05-15 17:06:27

    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

    angular.module('M1',['ng','ngRoute'])
    .controller('C1',function($scope,$http){
        $scope.data = 999;
        $http.get().success();    
    })
    这段代码运行时:只需要传入所需要的模块的名称,ng底层自动创建相关的对象,直接使用

    répondre
    0
  • 阿神

    阿神2017-05-15 17:06:27

    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

    répondre
    0
  • 滿天的星座

    滿天的星座2017-05-15 17:06:27

    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.

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-15 17:06:27

    Vous pouvez vous référer à : http://www.nowcoder.com/questionTerminal/3be16186465a453f876729acd2e46ddf

    répondre
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-15 17:06:27

    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.

    répondre
    0
  • 迷茫

    迷茫2017-05-15 17:06:27

    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();
    }

    répondre
    0
  • Annulerrépondre