我目前正在将匕首引入Android应用程序。我对设计方面有点担心,我想知道是否有更好的方法来处理它。让我们使用提供的示例here来说明问题。考虑以下模块;
@Module
class DripCoffeeModule {
@Provides Heater provideHeater() {
return new ElectricHeater();
}
@Provides Pump providePump(Thermosiphon pump) {
return pump;
}
}
在这里,很容易看到泵的创建取决于Thermosiphon
,因此,它在providePump
方法中作为arg提供。同样,如果我们希望DripCoffeeModule
模块能够提供类型为C
的对象,其依赖关系为Heater
和Pump
,我们将使用以下方法:
@Provides
C provideC(Heater heater, Pump pump){
C wantedC = applyMagic(heater, pump)
return c
}
如果provideC
方法有16个(或任何大量)依赖项,它会有16个或更多args吗?有没有更好的方法来处理这种情况?
答案 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, ...) { /* ... */ }
/* ... */
}