0

J'utilise une file d'attente de travaux prioritaires dans un projet qui utilise les concepts d'architecture propre. La chose est: faire DI avec file d'attente prioritaire, je dois créer un travail de BaseJob comme ceci:Injection de dépendances avec file d'attente de travaux prioritaires dans une architecture propre

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) { 

} 

Le problème est que dans les lignes:

public void inject(ApplicationComponent appComponent) { 

} 

je besoin d'accéder ApplicationComponent qui est dans la couche de présentation, mais comme mon BaseJob est dans la couche de données, je n'y ai pas accès.

Si je fais connaître à la couche de données de la présentation je vais casser les principes de l'architecture propre.

Est-ce que quelqu'un a une idée de comment je pourrais faire ça?

+0

Que faites-vous avec cette appComponent? –

+0

À la suite de cet exemple: [link] (https://github.com/yigit/dev-summit-architecture-demo/blob/master/client/app/src/main/java/com/android/example/devsummit/archdemo /di/module/ApplicationModule.java). Je l'utilise pour injecter des dépendances dans mon travail. Je n'ai pas pu placer de code ici, donc c'est dans la ligne 111 – user2601142

Répondre

0

Dans l'architecture propre d'Uncle Bob, il n'y a pas de couche de données, mais des entités, des cas d'utilisation, des adaptateurs d'interface et des frameworks. Les cercles intérieurs ne doivent pas connaître les cercles extérieurs. Vous pouvez inverser les dépendances en définissant une interface dans un cercle interne et l'implémenter dans un cercle externe.

Vous avez donc probablement besoin d'une interface pour que votre ApplicationComponent soit défini dans le cercle interne.

Pour une discussion plus détaillée sur la dépendance inversion un coup d'oeil à mon poste https://plainionist.github.io/Implementing-Clean-Architecture-Controller-Presenter/