2017-07-29 2 views
0

En ce moment j'essaie de comprendre l'injection de dépendance. Disons que j'ai des classes suivantes:Injection de dépendance des classes Pojo

album

public class Album { 
    private String id; 
    private String name; 
    private String cover; 
    private Artist artist; 
} 

Chanson

public class Song { 
    private String id; 
    private String title; 
    private Artist artist; 
    private Album album; 
} 

Artiste

public class Artist { 
    private String id; 
    private String name; 
} 

Alors Song dépend de Album et Artist et Album dépend de Artist. Disons que je reçois tous les champs requis d'une base de données. Actuellement, tous les membres sont transmis via le constructeur. Normalement, je créerais par exemple le même objet album plusieurs fois (en boucle pour chaque chanson du même album). Est-ce quelque chose qui peut être évité avec l'injection de dépendance?

Comment pourrais-je faire avec Dagger2? Je ne comprends pas vraiment le sujet à ce sujet. Est-ce seulement "déplacer le constructeur" hors de la classe?

Répondre

4

Si vous utilisez Dagger pour créer vos classes de modèle, vous faites définitivement quelque chose de mal.

En théorie, cela est possible, bien sûr. Vous auriez encore besoin d'une boucle, mais maintenant vous devez créer vos composants et passer les arguments afin qu'ils puissent créer leur Artist, leur Album et leur Song respectivement. Un ArtistComponent qui fournit son Artist au AlbumComponent, etc.

Au final, vous avez toujours une boucle, mais cette fois, vous créez simplement des composants pour créer les objets dont vous avez besoin. La seule chose que vous avez gagné ici, c'est beaucoup de frais généraux et beaucoup plus de créations d'objets qu'auparavant. Donc non, s'il vous plait, n'utilisez pas Dagger ici. L'injection de dépendances est destinée à lier votre logique d'entreprise ensemble.


Si vous avez un ArtistDao qui lit à partir de la base de données, vous pouvez également avoir un ArtistPresenter qui nécessite que DAO fonctionne. ArtistDao lit et crée les artistes (modèles de données), mais vous pouvez utiliser Dagger pour créer le DAO et le transmettre au présentateur.

Est-ce que cela ne fait que déplacer le constructeur de la classe?

Dague ne crée pas d'objets par magie. Si vous avez une dépendance, vous déclarez toujours cette dépendance dans votre constructeur. Dagger appellera le constructeur avec les paramètres corrects pour vous et éventuellement conserver l'objet créé pour plus tard (étendues). Les cadres de dépendances ont pour but de réduire la température, de créer un objet, de le passer au suivant, etc. Ils vont résoudre vos dépendances et les conserver.