0

我在一个使用干净架构概念的项目中使用优先级作业队列。问题是:要使用优先级作业队列执行 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 位于数据层中,因此我无权访问它。

如果我让数据层知道表示,我将打破干净架构的原则。

有谁知道我该怎么做?

4

1 回答 1

0

在 Bob 大叔的干净架构中,没有数据层,只有实体、用例、接口适配器和框架。内圈一定不知道外圈。您可以通过在内圈中定义接口并在外圈中实现来反转依赖关系。

因此,您可能需要在内圈中定义您的 ApplicationComponent 的接口。

有关依赖倒置的更详细讨论,请查看我的帖子https://plainionist.github.io/Implementing-Clean-Architecture-Controller-Presenter/

于 2018-02-25T05:39:21.773 回答