如何解释依赖注入到5岁? [关闭](How to explain dependency inje

2019-09-02 01:35发布

什么是解释一个很好的方式依赖注入 ?

我发现在谷歌几个教程,但没有人会假定读者是一个Java初学者。 你会如何解释这是新手?

Answer 1:

我给你依赖注入五岁。

当你去拿东西从冰箱里拿出你自己的,你可能会导致问题。 你可能会敞开大门,你可能会得到一些东西的妈妈或爸爸不希望你有。 你甚至可能寻找的东西,我们甚至没有或已过期。

你应该做的是指出有必要,“我需要的东西午餐喝,”然后我们将确保你有什么事情,当你坐下来吃饭。



Answer 2:

那这个呢?

如果你有一个一流的Employee和该员工有一个Address ,你可以让Employee定义类,如下所示:

class Employee {
    private Address address;

    // constructor 
    public Employee( Address newAddress ) {
        this.address = newAddress;
    }

    public Address getAddress() {
    return this.address;
    }
    public void setAddress( Address newAddress ) {
        this.address = newAddress;
    }
}

一切都看起来不错迄今。

这段代码显示了HAS-A的员工和他的地址之间的关系,这很好。

现在,这已经-A的关系创造了他们之间的依赖关系。 这个问题是在构造函数中。

每次你想创建一个Employee ,你需要一个实例Address的实例:

 Address someAddress = ....
 Employee oscar = new Employee( someAddress ); 

尤其是当您要执行单元测试这种方式工作变得困难。

当你需要测试一个特定的对象,主要问题就来了,你需要创建其他对象的实例,并最有可能你需要再创建其他对象的实例来做到这一点。 链可能会变得难以管理。

为了避免这种情况,你可以改变这样的构造:

  public Employee(){
  }

使用无参数的构造函数。

然后,当你永远想你可以设置地址:

 Address someAddress = ....
 Employee oscar = new Employee();
 oscar.setAddress( someAddress ); 

现在,这可能是一个累赘,如果你有几个属性,或者如果对象是努力创造。

然而,想想这一点,让我们说,你添加Department属性:

  class Employee {
      private Address address;
      private Department department;

  ....

如果你有300名员工,他们都需要具有相同的部门,加上同一部门必须有一些其他对象之间共享(如部门的公司名单,或者角色的每个部门都等),然后你会也很难与知名度Department对象,并通过对象的所有网络分享。

什么是依赖注入是所有关于它来帮助你,那么,在你的代码“注入”这些依赖关系。 大部分的框架允许你通过一个外部文件中指定要做到这一点,有什么目的在于注入。

假设一个虚构的依赖注入属性文件:

  #mock employee
  employee.address = MockAddress.class
  employee.department = MockDepartment.class

  #production setup 
  employee.address = RealAddress.class
  employee.department = RealDepartment.class

你会怎样定义为给定的情况下注入。

什么是依赖注入框架将做的是设置正确的对象为你,所以你不必代码setAddresssetDepartment 。 这要么通过反射或通过代码生成或其他技术来完成。

所以,下一次你需要测试的Employee类,你可以注入模拟AddressDepartments对象,而无需编写所有的设置/获取您的所有测试。 更妙的是,你可以注入真正的 AddressDepartment在生产代码的对象,而且还有你的代码工作作为测试的信心。

这是相当多了。

不过我不认为这解释适用于5岁老当你提出要求。

我希望你还是觉得它有用。



Answer 3:

当写一个类,它是自然为它使用的其他对象。 你可能有一个数据库连接,例如,或者你使用一些其他的服务。 这些其他对象(或服务)的依赖。 写代码最简单的方法就是创建和使用的其他对象。 但是,这意味着你的对象必须依赖那些僵硬的关系:不管为什么要调用你的对象,它使用相同的依赖关系。

一个更强大的技术是能够创建你的对象,并为其提供依赖使用。 所以,你可以创建一个数据库连接使用,然后将它交给你的对象。 通过这种方式,你可以创建在不同时间的不同依赖你的对象,使你的对象更加灵活。 这是依赖注入,在那里你“注入”的依赖关系为对象。

BTW:在使用Flickr照片来说明概念的现代表现风格,这可以用一个吸毒者自己拍摄了药物说明。 哦,等等,这是注射的依赖...... OK,对不起,拙劣的玩笑。



Answer 4:

我不知道任何简单的教程,但我可以给你一个几乎25 250字或多或少版本:

依赖注入的对象不配置其自身的组成部分是基于它已经知道,而对象是由更高层次的逻辑配置的东西,然后调用它没有内置的预知组件。 我们的想法是使一个组件的对象的更多和更小的应用,在较高的水平重定位配置任务。 这使得对象更可能是在未来或具有不同配置是有用的。

这对测试更好,最好当谈到时间来修改申请。 典型的实现放入XML配置和使用一个框架,以动态加载的类。



Answer 5:

当你得到赋予了新的任天堂,你可以使用按钮和触摸屏玩游戏。

但在任天堂的工厂,他们需要知道如何把一个在一起。

当聪明的人在工厂带来了任天堂的DS,这将是不同的里面,但你还是会知道如何使用它。



文章来源: How to explain dependency injection to a 5-year-old? [closed]