我在一个使用干净架构概念的项目中使用优先级作业队列。问题是:使用优先级作业队列进行DI我需要创建一个像这样的BaseJob作业:
abstract public class BaseJob extends Job {
@Retention(RetentionPolicy.SOURCE)
@IntDef({UI_HIGH, BACKGROUND})
public @interface Priority {
}
public static final int UI_HIGH = 10;
public static final int BACKGROUND = 1;
public BaseJob(Params params) {
super(params);
}
protected boolean shouldRetry(Throwable throwable) {
return true;
}
public void inject(ApplicationComponent appComponent) {
}
问题在于:
public void inject(ApplicationComponent appComponent) {
}
我需要访问表示层中的ApplicationComponent,但由于我的BaseJob位于数据层,因此我无法访问它。
如果我让数据层了解演示文稿,我将打破干净架构的原则。
有谁知道我该怎么做?
答案 0 :(得分:0)
在Uncle Bob的干净架构中,没有数据层,只有实体,用例,接口适配器和框架。内圈一定不知道外圈。您可以通过在内部圆圈中定义接口并在外部圆圈中实现它来反转依赖关系。
所以你可能需要在内圈中定义一个用于ApplicationComponent的接口。
有关依赖性反转的更详细讨论,请查看我的帖子https://plainionist.github.io/Implementing-Clean-Architecture-Controller-Presenter/