如何处理匕首中多个其他依赖的依赖?

时间:2015-04-23 07:55:48

标签: android dagger

我目前正在将匕首引入Android应用程序。我对设计方面有点担心,我想知道是否有更好的方法来处理它。让我们使用提供的示例here来说明问题。考虑以下模块;

@Module
class DripCoffeeModule {
  @Provides Heater provideHeater() {
    return new ElectricHeater();
  }

  @Provides Pump providePump(Thermosiphon pump) {
    return pump;
  }
}

在这里,很容易看到泵的创建取决于Thermosiphon,因此,它在providePump方法中作为arg提供。同样,如果我们希望DripCoffeeModule模块能够提供类型为C的对象,其依赖关系为HeaterPump,我们将使用以下方法:

@Provides
C provideC(Heater heater, Pump pump){
  C wantedC = applyMagic(heater, pump)
  return c
}

如果provideC方法有16个(或任何大量)依赖项,它会有16个或更多args吗?有没有更好的方法来处理这种情况?

1 个答案:

答案 0 :(得分:0)

在这种情况下,我认为你C的设计是有缺陷的。来自IntelliJ IDEA Code Inspections List

  

过度耦合的课程
  此检查报告任何高度类的实例   耦合,即引用太多其他类。同样的课程   高耦合可能非常脆弱,应该可以解决。

因此,您不希望为C类提供16个依赖项,但是您需要2-3-4个依赖项,而这依赖于少量类。< / p>

如果您真的需要很多依赖项,可以使用@Inject注释构造函数。然后不需要@Provides C provideC(...)方法:

public class C {

  @Inject
  public C(Object arg1, Object arg2, Object arg3, ...) { /* ... */ }

  /* ... */
}