Un Backend For Frontend, une API sur-mesure
Un exemple avec du code
Voici mon composant (simplifié) que je considère comme complexe. Il s’agit d’un composant qui rend une liste de commentaires.
Quels sont ses défauts ?
En analysant la méthode fetchComments(), il est notable que pour bien afficher les commentaires, le composant est obligé de :
D’après le Single Responsibility Principle, le composant doit faire une seule chose et la faire bien. Autant se dire, qu’ici, il a trop de responsabilités.
Ma vision est de laisser le composant maîtriser la présentation des commentaires et de confier la récupération des commentaires à un autre service, que j’appelle comments-service.
Dès qu’il est monté, le composant récupère la donnée. C’est le commentsService qui lui fournit celle-ci. Puis les commentaires sont affichés dans le template. Simple !
Désormais le comments-service doit gérer la récupération de données.
Pour cela, j’utilise un api-service qui va gérer toute la partie infrastructure (axios, API_URL, extraction de la donnée dans le champ ‘data’).
Puis j’applique les fonctions de formatage et de tri, afin de fournir au composant de la donnée pure à afficher.
Et pour la route, voici mon api-service :
Pour aller plus loin, il est possible de sortir les dépendances telles qu’api-service ou axios, et de les injecter directement grâce à un container de dépendances comme InversifyJS. Mais ceci est une autre histoire ;-)