[Kotlin][Androit studio][Inversion de dependance] Android TvShow

Bonjour,

Je suis actuellement le cours sur Kotlin et Android, et je bloque sur la compréhension de l’interface client au sein du ShowsManager.
En quoi le fait de faire une interface dans cette classe.
Permet aux différentes activités (qui implémentent cette interface) de récupérer d’elle même les informations. Est ce que ça fonctionne comme un « événement » ?
Est ce que lorsque le ShowsManager récupère des données via l’API:
fun loadTopShowList(client:ShowsManager.Client) {
dataProvider.getTopTVShows { showList, error ->
client.receiveShowList(showList)
}
}

fun loadMyShowList(client: ShowsManager.Client) {
    client.receiveShowList(localDataManager.getFavoriteShowsList())
}</code>

Lorsque la fonction loadTopShowList éxécute un client.receiveShowList(showList) cela veut dire que tous les « clients » ,donc les objets qui implémentent l’interface reçoivent la liste de ?

Cette question paraît peut être bête, je regarde les vidéos en boucle ainsi que le code mais j’ai du mal à suivre le déroulement logique de ce qui ce passe avec cette interface… ^^"

Merci d’avance et bonne soirée.

Bonjour,

Après avoir fait des recherches et regardé des cours sur l’inversion de contrôle et l’injection de dépendance, je remarque que dans presque tous les cas, on utilise une instance de l’interface dans le code « Présentation » qui fait appelle au code de la classe qui implémente l’interface.

Dans le code TV Show on utilise une instance du « ShowManager » dans lequel on définit l’interface client ? Donc est ce que ça revient au même ou c’est juste différent et le but n’est pas le même…

Merci d’avance

Merci Gael, c’est une excellent question et je sais que ces notions d’interfaces se présentent de premier abord comme des contraintes. En réalité elles apportent de la flexibilité en te permettant de remplacer ton instance par une autre sans changer le reste du code (a part la ligne où tu crées l’instance justement).
Ca peut être utile dans plusieurs cas :

  • Si tu prévois des changements dans le futur (tu utilises une bibliothèque
    externe qui pourrait disparaître à l’avenir)
  • Si tu veux exécuter des tests unitaires ou des tests automatisés (tu mettra une fausse instance à la place de la vrai pour éviter que tes tests affectent le reste de l’app)
  • Si tu veux proposer plusieurs versions d’une fonctionnalité (app gratuite et app pro par exemple)
  • etc.

Tu as raison en disant que dans tous les cas tu dois créer ton instance à un moment ou à un autre, mais si le reste de ta classe n’a pas connaissance de l’instance tu tires énormément de bénéfices de cette interface.
J’espère avoir pu te donner des pistes de réflexion :slight_smile: