- Ymox,
Bonjour tout le monde !
Aujourd’hui, je créé ce sujet pour qu’on m’aide à raisonner sur un cas concret d’utilisation du patron de développement factory appliqué à des services Symfony 4.
Je planche sur une application qui devra se connecter à diverses sources pour récupérer des données. Ces sources sont hétéroclites, je ne pourrai pas utiliser un même client pour toutes, il me faudra des spécialisations — et à terme, je ne suis même pas sûr que les sources soient toutes des APIs REST, on pourrait en venir à devoir traiter du HTML, mais justement, je pense que si c’est bien réfléchi au départ, ce ne sera pas un souci.
Je vais récupérer des informations qui entrent dans ma base de données, donc je sais assez précisément ce dont j’ai besoin de récupérer comme informations sur ces sources, et en conséquence, j’ai un nombre défini de méthodes. Les choses qui vont donc varier, ce sont
- l’URL de la source ;
- la manière de traiter les informations pour les faire correspondre au format de mon application.
Je pensais d’abord créer une classe client par source, et leur passer des objets spécialisés pour effectuer le mapping des informations récupérées (je vais appeler ces objets des mappers).
Mon souci est en fait au niveau technique : si ces mappers vivent dans des espaces de noms propres à leur source, comment les lier à mon client ? Je pourrais évidemment les instancier directement dans la classe spécialisée, mais j’ai l’impression que c’est trop fortement lié comme architecture — ce qui n’empêcherait pas mon impression d’être fausse.
Au final, je me demande comment lier mes éléments qui sont :
- mon URL vers la source (qui pourrait être directement encapsulé dans un client GuzzleHttp mais du coup il me faudrait une fabrique pour en construire depuis mes URLs de base) ;
- mes mappers, dont leur nombre est défini au moment de l’utilisation, mais qui peut évidemment varier en fonction des évolutions.
J’ai déjà de la peine à expliquer tout ça par écrit, et même si ça m’a aidé à défricher, je pense que je dois manquer quelque chose…
Une bonne âme pourrait-elle m’aider à y voir plus clair ?
Merci d’avance