Bonjour à tous,
Je suis en train de développer une application permettant de savoir ce qui est en train d’être joué quelque part pour ensuite pouvoir par exemple l’ajouter à une playlist Spotify. Ce quelque part est variable et peut par exemple être une station radio spécifique ou un speaker Sonos.
Donc pour modéliser tout ça, je pensais utiliser un Strategy pattern qui ferait deux choses:
- Identifier la chanson qui est en train d’être jouée
- La sauvegarder dans une playlist
Pour ma première étape, je voulais avoir une interface du type
public interface SpeakerService {
Song whatsPlaying();
}
Et ensuite avoir une implémentation pour RadioSpeakerService
et une autre pour SonosSpeakerService
. Mais c’est ici que je bloque: ces deux implémentations ont besoin de paramètres différents pour savoir ce qui est joué. Dans le cas du RadioSpeakerService, on a besoin d’une URL vers le stream tandis que pour SonosSpeakerService, on a besoin de l’ID du speaker (et potentiellement d’autres paramètres).
Je vois deux solutions pour résoudre ceci:
- Ajouter un paramètre
PlayingRequest
à ma méthodewhatsPlaying
qui serait une interface. Ensuite avoir deux implémentations de cette interface, une pour radio, une pour Sonos. Je pense que ça devrait fonctionner mais ça m’a l’air potentiellement usine à gaz et une mauvaise utilisation du pattern - Plutôt que d’ajouter un paramètre à la méthode, je pourrais ajouter des attributs à mes services concrets et ma méthode pourrait rester sans paramètre. Je n’aime pas cette solution non plus car idéallement, je voudrais que mes services soient des composants Spring que je peux instancier une seule fois plutôt qu’une fois par requête.
Je serais curieux d’avoir votre avis si il y a d’autres solutions que je n’aurais pas envisagées qui vous semblent adéquates pour résoudre mon problème. Ou si une des deux solutions présentées vous semblent pas si mauvaise que ça.
Merci d’avance !