Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Article] Micro-frontend #230

Open
wants to merge 19 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions site/content/posts/2021-01-08-micro-frontend.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
---
title: Micro frontend
author: Benoit et Willy
date: 2021-01-08
image: /img/2021-01-08-micro-frontend/microfrontend-thumbnail.jpeg
altimage: "'Crayons de couleur' by Supernico26 is licensed under CC BY 2.0"
categories:
- FRONTEND
tags:
- micro-frontend
- micro
- frontend
- front
---

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello, ci dessous un brouillon d'une intro à ajouter / merger avec autres choses ;)

Dans le domaine du génie logiciel, les microservices désignent un type d'architecture dans lequel un ensemble de services indépendants et autonomes forment un tout cohérent.
Contrairement à une approche monolithique dans laquelle tous les éléments du logiciel sont étroitement liés, l'approche micro service consiste à fragmenter la logique en de multiples composants (écrits/basés sur différentes technologies) qui communiquent via des API définies.

Du point de vue des développeurs, l'idée principale repose dans la possibilité de gérer chaque service comme un projet à part entière, ce qui en facilite entre autres, la maintenance, l'évolution et la gestion projet.
En effet, une telle approche permet une répartition des différents travaux entre les équipes tout en leur accordant autonomie et liberté concernant leur organisation et leurs choix des technologies.

Dans le domaine du web l'approche microservice est souvent utilisée dans le cadre de l'implémentation de backends. Ceux-ci fonctionnent communément sous la forme d'un ensemble d'API REST qui discutent entre elles et / ou répondent aux requêtes des interfaces utilisateurs.
De manière similaire, la conception d'interfaces graphiques peut suivre une logique analogue. L'idée principale réside sur le principe de composition. En effet il s'agit d'une architecture dans laquelle des sous-produits fronts indépendants sont assemblés pour former un tout plus important, une application.

L'approche microservice appliquée au frontend et au backend permet de confier la réalisation d'une fonctionnalité à une équipe autonome et polyvalente chargée de sa conception dans son ensemble, de la gestion des données à leur présentation.
Dans le cadre de l'élaboration d'un logiciel, l'autonomie des équipes peut être une source de conflits et difficultés. C'est la raison pour laquelle il est nécessaire de définir un cadre et des règles de construction claires afin de coordonner et synchroniser les travaux afin d'aboutir à un produit cohérent.

Ce document se focalise sur l'application d'une approche microservice du côté du frontend. Avec quelles méthodes / outils les équipes peuvent-elles coordonner leur travaux et garantir la livraison d'un produit fonctionnel ?
En effet la cohérence des styles, l'utilisation de bibliothèques partagées et d'une charte graphique sont autant de modes de fonctionnement en faveur d'une appréhension et application correcte du paradigme.

L'architecture micro-service a rapidement été adoptée pour les services backend des applications web, typiquement en découpant ces services en différents blocs métiers. Généralement, ces services reposent sur une implémentation de type REST. Ceci permet un découplage complet entre la partie cliente (Web User Interface) d’un produit et la partie backend qui gère les données.
Cependant, et grâce au découplage apporté par l'intertace REST, ce découpage en micro-services backend n'influence en rien l'architecture de la partie cliente (ou front).
Cette problématique est aussi présente sur des applications frontend monolothique. C'est encore l'architecture que l'on retrouve malheuresement le plus souvent dans les logiciels Web.

Le micro-frontend propose alors une approche différente. C’est un style d’architecture dans lequel des **sous-produits fronts indépendants** sont **composées ensemble pour former un tout plus grand**.
Par exemple, avec l’approche DDD (Domain Driven Design), on peut voir les sous-produits comme des "sous-domaines" (bounded context) d’un domaine.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Il pourrait être interessant de clarifier la notion de Domain Driven Design en mettant un lien vers la page wikipedia ou de la dddCommunity ;)

Dans une architecture micro-frontend, chaque sous-produit est indépendant, et peut potentiellement être sous la responsabilité **d’une seule équipe autonome**. Ainsi, on limite au maximum les interactions entre les équipes concernant son cycle de vie (déploiement, mise en production, mise à jours, etc.). Toute problématique d'intégration avec les autres sous-produits et les équipes qui en ont la charge est alors éliminée.
Ainsi, celle-ci a donc la responsabilité **du backend et du frontend**, on y trouve donc des développeurs fullstack et/ou des développeurs backend et/ou des développeurs frontend.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Ainsi, celle-ci a donc la responsabilité **du backend et du frontend**, on y trouve donc des développeurs fullstack et/ou des développeurs backend et/ou des développeurs frontend.
Avec ce modéle, une équipe a la responsabilité **du backend et du frontend**, on y trouve donc des développeurs fullstack et/ou des développeurs backend et/ou des développeurs frontend.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"modèle" ;)

Dans cette architecture, le plus important va être de livrer de bout-en-bout en étant totalement indépendant.

![micro-frontend](/img/2021-01-08-micro-frontend/micro-frontend.png)

Les premiers avantages à relevés sont « l'indépendance opérationnelle » ou « l’indépendance au runtime » :
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Les premiers avantages à relevés sont « l'indépendance opérationnelle » ou « l’indépendance au runtime » :
Les premiers avantages à relever sont « l'indépendance opérationnelle » ou « l’indépendance au runtime » :


- généralement l’équipe à son propre dépôt de code source et peut déployer ses services indépendamment les uns des autres, en choisissant les technologies qu’elle souhaite mettre en place (exemple : Go pour le backend et ReactJS pour le frontend pour le sous-produit A).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- généralement l’équipe à son propre dépôt de code source et peut déployer ses services indépendamment les uns des autres, en choisissant les technologies qu’elle souhaite mettre en place (exemple : Go pour le backend et ReactJS pour le frontend pour le sous-produit A).
- généralement l’équipe a son propre dépôt de code source et peut déployer ses services indépendamment les uns des autres, en choisissant les technologies qu’elle souhaite mettre en place (exemple : Go pour le backend et ReactJS pour le frontend pour le sous-produit A).


- l’équipe à sa propre suite de tests automatisés et une pipeline de livraison vers la production.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- l’équipe à sa propre suite de tests automatisés et une pipeline de livraison vers la production.
- l’équipe a sa propre suite de tests, de préférence automatisés, et son propre pipeline de livraison vers la production.


De cette manière, une seule équipe peut prendre par exemple la charge d’ajout d’une fonctionnalité au produit, et l’amener par ses propres moyens vers une livraison finale, sans impacter les autres équipes. Le tout de manière fullstack.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
De cette manière, une seule équipe peut prendre par exemple la charge d’ajout d’une fonctionnalité au produit, et l’amener par ses propres moyens vers une livraison finale, sans impacter les autres équipes. Le tout de manière fullstack.
De cette manière, les équipes son indépendantes. Chacune peut ajouter des fonctionnalités au produit, et les amener par ses propres moyens, vers une livraison en production et, le tout, sans impacter les autres équipes.

J'enléverrai « de manière fullstack ».

Le produit général se retrouve avec des bases de codes plus petites, plus cohérentes et maintenables. Mais aussi avec des équipes découplées et autonomes permettant de gagner en évolutivité. Tout cela favorise une mise à jour, une mise à niveau ou une réécriture des parties du frontend, bien plus progressive qu’auparavant.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Le produit général se retrouve avec des bases de codes plus petites, plus cohérentes et maintenables. Mais aussi avec des équipes découplées et autonomes permettant de gagner en évolutivité. Tout cela favorise une mise à jour, une mise à niveau ou une réécriture des parties du frontend, bien plus progressive qu’auparavant.
Le produit général se retrouve avec des bases de code plus petites, plus cohérentes et maintenables. Mais aussi avec des équipes découplées et autonomes permettant de gagner en évolutivité. Tout cela favorise une mise à jour, une mise à niveau ou une réécriture des parties du frontend, bien plus progressive qu’avec une architecture monolitique.


Quel est le coût d’une telle architecture ? Il peut y avoir des fragmentations dans la manière dont les équipes travaillent et qui peut être causée par l’autonomie qui leurs sont accordées.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On peut expliquer « fragmentations » ?

Je ne suis pas sûr de comprendre.

Plus les équipes augmentent, plus il devient difficile de s’assurer que les connaissances sont transférées et que le code ne devienne pas trop hétérogène entre les équipes.

## Comment gérer la cohérence du style ?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Comment gérer la cohérence du style ?
## Comment gérer la cohérence du style ?
Dans une architecture micro-frontent, avec laquelle des équipes indépendantes développent des fonctionnalités, on peut voir apparaître une problèmatique de cohérence du style.
Voyons un exemple.


Si dans un micro-frontend A, la feuille de style dit `a { color: red; }` et que celle du micro-frontend B dit que `a { color: blue; }`, une des deux équipes sera forcément déçue.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Si dans un micro-frontend A, la feuille de style dit `a { color: red; }` et que celle du micro-frontend B dit que `a { color: blue; }`, une des deux équipes sera forcément déçue.
Si dans un micro-frontend A, la feuille de style dit `a { color: red; }` et que celle du micro-frontend B dit que `a { color: blue; }`, les équipes sont face a un problème de cohérence de style.

Dans ce mode d’architecture, et par le fait que le CSS est un langage héréditaire et en cascade, si tous les sélecteurs écrits par les équipes sont rassemblées en une page, un problème se pose. Comment rendre le CSS plus maniable ?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Est-ce qu'on expliquerait pas, en une phrase, le problème qui se pose ? 

Il est recommandé de ne rien laisser d'implicite à la rédaction d'un article (des gens ne maitrisant pas le CSS pourrait avoir envie de comprendre).


Le plus important est de trouver un moyen de s’assurer que les développeurs codent leurs styles indépendamment les uns des autres, et que la composition de ces styles en une seule application est prévisible.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Le plus important est de trouver un moyen de s’assurer que les développeurs codent leurs styles indépendamment les uns des autres, et que la composition de ces styles en une seule application est prévisible.
Le plus important est de trouver un moyen de s’assurer que les développeurs codent leurs styles indépendamment les uns des autres, et que la composition de ces styles en une seule application est prévisible et cohérente.

Depuis quelques années, plusieurs approches ont été inventées pour faire cela :

- avoir une convention de dénomination stricte :
par exemple avec la [syntaxe BEM](http://getbem.com/) qui s’assure que les sélecteurs sont appliqués seulement aux endroits prévus (dans un composant par exemple)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Double répétition de "par exemple".
Je pense que : "La syntaxe BEM qui s’assure que les sélecteurs sont appliqués seulement aux endroits prévus (dans le cadre d'un composant par exemple) et avec une syntaxe précise" devrait suffire !


- l’utilisation d’un préprocesseur, comme [SASS](https://sass-lang.com/) ou [LESS](http://lesscss.org/)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Il pourrait être intéressant de préciser (en une petite phrase, comme pour BEM) en quoi l'utilisation d'un préprocesseur peut être une solution.
En effet ce type de préprocesseur permet de structurer / hiérarchiser le css ce qui a pour effet de limiter les effets de bords.


- appliquer les styles programmatiquement avec des modules CSS ou avec du CSS-in-JS, pour garantir que les styles sont appliqués juste au bon endroit

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- appliquer les styles programmatiquement avec des modules CSS ou avec du CSS-in-JS, pour garantir que les styles sont appliqués juste au bon endroit
- appliquer les styles programmatiquement avec les [Css modules](https://github.com/css-modules/css-modules) ou avec du [CSS-in-JS ](https://github.com/css-modules/css-modules), pour garantir que les styles sont appliqués aux bons endroits


- l’utilisation du [shadow DOM](https://developer.mozilla.org/fr/docs/Web/Web_Components/Using_shadow_DOM) avec des [Web Component](https://developer.mozilla.org/fr/docs/Web/Web_Components) par exemple

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pareil que ci dessus, une petite phrase d'explication serait vraiment top :)


## Peut-on utiliser une bibliothèque de composants partagés

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Peut-on utiliser une bibliothèque de composants partagés
## Peut-on utiliser une bibliothèque de composants partagés ?


Visuellement, il est clair qu’il faut mettre de l’importance sur la cohérence visuelle entre les micro-frontends. Une bibliothèque de composants UI partagés et réutilisables est en général une bonne préconisation. Cette bibliothèque de composants sert de guide de style (styleguide) collaboratif entre les acteurs du produit à développer.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Visuellement, il est clair qu’il faut mettre de l’importance sur la cohérence visuelle entre les micro-frontends. Une bibliothèque de composants UI partagés et réutilisables est en général une bonne préconisation. Cette bibliothèque de composants sert de guide de style (styleguide) collaboratif entre les acteurs du produit à développer.
Il est clair qu’il faut mettre en avant la cohérence visuelle entre les micro-frontends. Une bibliothèque de composants UI partagés et réutilisables est une réelle préconisation. Cette bibliothèque de composants sert de guide de style (styleguide) collaboratif entre les acteurs du produit à développer.

Cependant, avant d’utiliser un composant front de ce styleguide, il va devoir être pensé, puis créer, remanier, ou repenser encore. Difficile alors d’attendre qu’une autre équipe mette en place un composant, de comprendre comment il fonctionne, pour ensuite l’implémenter ailleurs où là base de code est peut être complètement différente.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Cependant, avant d’utiliser un composant front de ce styleguide, il va devoir être pensé, puis créer, remanier, ou repenser encore. Difficile alors d’attendre qu’une autre équipe mette en place un composant, de comprendre comment il fonctionne, pour ensuite l’implémenter ailleurs où là base de code est peut être complètement différente.
Cependant, avant d’utiliser un composant front de ce styleguide, il va devoir être pensé, créé, remanié, et repensé encore. Difficile alors d’attendre qu’une autre équipe mette en place ce composant. En effet, si une équipe A apporte des remaniements à ce composant, il va être difficile pour une équipe B de comprendre comment il fonctionne, pour ensuite l’implémenter, ailleurs, où là base de code est peut être complètement différente.

Il est donc préférable de remplir encore la case de l’autonomie d’équipe, et de les laisser créer leurs propres composants chez eux au fur et à mesure qu’ils en ont besoin.
Il peut y avoir des duplications, mais une fois qu’elles sont devenues évidentes au niveau de la modélisation graphique, c’est à ce moment-là qu’il est intéressant de récolter tout ça et de l’inscrire dans une bibliothèque partagée.
Ici, on parle bien uniquement de composants qui ont une **logique UI** (marges, icônes, étiquettes, boutons, fonts, grilles, champs de recherche etc…). La bibliothèque ne doit pas contenir de logique métier (ou de domaine). Ces dernières appartiennent aux codes métiers du micro-frontend, pas à la bibliothèque.

Émerge de cela un modèle de bibliothèque de composants avec un **gardien** ou **guilde** (une personne ou une équipe) qui va arbitrer et cultiver l’outil pour que la collaboration front entre les équipes se déroule bien. Il faut que les contributions à cette bibliothèque soient de bonne qualité, avec de la cohérence, et une bonne validité. Cela permet de consommer l’outil convenablement sans que les équipes se marchent dessus.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Émerge de cela un modèle de bibliothèque de composants avec un **gardien** ou **guilde** (une personne ou une équipe) qui va arbitrer et cultiver l’outil pour que la collaboration front entre les équipes se déroule bien. Il faut que les contributions à cette bibliothèque soient de bonne qualité, avec de la cohérence, et une bonne validité. Cela permet de consommer l’outil convenablement sans que les équipes se marchent dessus.
Émerge de cela un modèle de bibliothèque de composants avec un **gardien** ou **guilde** (une personne ou une équipe) qui va arbitrer et cultiver l’outil pour que la collaboration front entre les équipes se déroule bien. Il faut que les contributions à cette bibliothèque soient de bonne qualité, avec de la cohérence, et une bonne validité. Cela permet de d'utiliser l’outil convenablement sans que les équipes se marchent dessus.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Que veut dire "une bonne validité" ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Émerge de cela un modèle de bibliothèque de composants avec un **gardien** ou **guilde** (une personne ou une équipe) qui va arbitrer et cultiver l’outil pour que la collaboration front entre les équipes se déroule bien. Il faut que les contributions à cette bibliothèque soient de bonne qualité, avec de la cohérence, et une bonne validité. Cela permet de consommer l’outil convenablement sans que les équipes se marchent dessus.
Émerge de cela une bibliothèque de composants avec un **gardien** ou **guilde** (une personne ou une équipe) qui va arbitrer et cultiver l’outil pour que la collaboration front entre les équipes se déroule bien. Il faut que les contributions à cette bibliothèque soient de bonne qualité, avec de la cohérence, et une bonne validité. Cela permet de consommer l’outil convenablement sans que les équipes se marchent dessus.

Je n'ai pas saisi ce qu'était un modèle de bibliothèque, c'est juste une bibliothèque ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Émerge de cela un modèle de bibliothèque de composants avec un **gardien** ou **guilde** (une personne ou une équipe) qui va arbitrer et cultiver l’outil pour que la collaboration front entre les équipes se déroule bien. Il faut que les contributions à cette bibliothèque soient de bonne qualité, avec de la cohérence, et une bonne validité. Cela permet de consommer l’outil convenablement sans que les équipes se marchent dessus.
Émerge de cela un modèle de bibliothèque de composants avec un **gardien** ou **guilde** (une personne ou une équipe) qui va arbitrer et cultiver l’outil pour que la collaboration front entre les équipes se déroule bien. Il faut que les contributions à cette bibliothèque soient de bonne qualité, avec de la cohérence, et une bonne validité. Cela permet de consommer l’outil convenablement sans que les équipes ne se marchent dessus.


## Charte graphique commune entre micro-frontends

Le cas d'une bibliothèque de composants partagés est recommandable dans de grosses applications, avec plusieurs pages, et où il est possible d'identifier plusieurs composants pouvant être réutilisés de partout.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Le cas d'une bibliothèque de composants partagés est recommandable dans de grosses applications, avec plusieurs pages, et où il est possible d'identifier plusieurs composants pouvant être réutilisés de partout.
Une bibliothèque de composants partagés est recommandée sur de grosses applications, avec plusieurs pages, et où il est possible d'identifier plusieurs composants pouvant être réutilisés de à plusieurs endroits.


Prenons l'exemple d'un site de commerce de produit en tout genre. La maquette et la charte graphique ont été réalisées par une équipe d'UX/UI et ont été fournies à toutes les équipes de développement.

En terme de micro-frontends, nous pouvons identifier :
- une équipe A qui s'occupe de la page produit
- une équipe B qui s'occupe de la page d'accueil affichant tous les produits.
- une équipe C en charge du processus de panier/paiement

De plus, sur la page produit, il est indiqué dans la maquette d'afficher une liste de produits similaires.

Afficher un produit revient à afficher un bloc contenant son image, son intitulé, son prix et un lien dirigeant vers sa propre page.

La façon d'afficher ces produits va être conduit par l'équipe A qui en a besoin pour sa page d'accueil, et par l'équipe B qui en a besoin aussi pour les produits similaires.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
La façon d'afficher ces produits va être conduit par l'équipe A qui en a besoin pour sa page d'accueil, et par l'équipe B qui en a besoin aussi pour les produits similaires.
La façon d'afficher ces produits va être conduite par l'équipe A qui en a besoin pour sa page d'accueil, et par l'équipe B qui en a besoin aussi pour les produits similaires.

Chacune des équipes va donc créer son propre composant produit, avec ses propres règles. Ensuite, une équipe annexe, a la responsabilité de fusionner les règles du composant définies par les équipes A et B en respectant la charte initiale. Cette fusion va donner aux équipes de développement un composant produit de référence, disponible dans une bibliothèque qui leurs est accessible.
Cette équipe annexe n'est même pas dans l'obligation de fournir un composant de référence dans une bibliothèque, mais peut simplement emettre aux équipes de développement les règles CSS (padding, marging, fonts, taille etc...) qui doivent être respectées.

## L'anarchie des micro-frontends

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sans rentrer dans le débat de l'anarchisme, je pense que le terme à utiliser ici est "Chaos" ("Le chaos des micro-frontends") ;)


L'architecture en micro-frontend gagne de plus en plus en popularité. Mais elle est parfois mal utilisée, voir utilisée avec abus. Un biais commun, est le mélange de technologies et d'outils, laissant place à une complexité indéniable comme par exemple l'utilisation de plusieurs frameworks structurants (`React`, `Vue`, `Angular`) ou diversifier à outrance la gestion du style (une application avec SASS, l'autre en BEM, ou encore avec du CSS-in-JS). Tout cela déteriore la cohérence technique de l'application globale.
Même si les équipes sont complètement autonomes dans un système micro-frontend, il faut tout de même essayer de standardiser les approches et les technologies utilisées.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Il manque une petite conclusion en lien avec l'introduction / problématique afin de terminer proprement le papier :)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Une architecture microservice permet d'une part l'utilisation et la cohabitation de technologies et d'outils hétérogènes, d'autre part, un fonctionnement sous forme de multiples équipes polyvalentes et autonomes.
Concevoir une application web sous la forme de microservices développés par plusieurs équipes nécessite une harmonisation et une spécification des pratiques.

Du point de vue front, le développement doit s'effectuer dans le respect de règles claires et tout particulièrement en ce qui concerne la cohérence des règles css. En effet des conventions de nommage ou l'utilisation d'outils dédiés permettent d'écarter en grande partie les conflits liés aux règles.
L'utilisation d'une bibliothèque de composant commune aux équipes apparait en faveur de la conservation d'une unité graphique. Celle-ci peut par ailleurs être améliorée au fur à mesure des développements afin d'être adaptée aux besoins.
Enfin, confier la réalisation d'une charte graphique ainsi que le maquettage à une équipe dédiée (UX / UI) permet d'obtenir des directives claires qui permettent à chaque équipe de développeurs de produire leurs services de manière cohérente.
Le succès de la conception d'un produit avec une architecture microservices ne repose pas exclusivement sur la qualité des outils et technologies utilisés. Mais dépend principalement des modes de fonctionnement et d'organisation permettant la bonne coopération des équipes.

## Sources :
- [Micro Frontends - extending the microservice idea to frontend development](https://micro-frontends.org/)
- [Micro frontend - Martinfowler](https://martinfowler.com/articles/micro-frontends.html)
- [Micro frontend - Article - Thoughworks](https://www.thoughtworks.com/radar/techniques/micro-frontends)
- [Micro frontend - Podcast - Thoughworks](https://www.thoughtworks.com/podcasts/micro-frontends)
- [Micro frontend anarchy - Article - Thoughworks](https://www.thoughtworks.com/radar/techniques/micro-frontend-anarchy)
- [De l'application monolithique aux architectures microservices - Julien Dubreuil - Freelance spécialisé Drupal, architecte web et développeur Drupal - ScrumMaster](https://juliendubreuil.fr/blog/developpement/de-application-monolithique-aux-architectures-microservices-ou-orientees-composants/#:~:text=A%20mon%20sens%2C%20le%20principal,r%C3%A9alis%C3%A9es%20dans%20une%20seule%20technologie.&text=Au%20fil%20du%20temps%2C%20cette,modulaire%20pr%C3%A9vue%20%C3%A0%20l'origine)
- [Que signifie architecture monolithique? - Definition IT de Whatis.fr](https://whatis.techtarget.com/fr/definition/architecture-monolithique)
- [Architectures micro-services : objectifs, bénéfices et défis - Partie 1](https://www.technologies-ebusiness.com/enjeux-et-tendances/architectures-micro-services-objectifs-benefices-defis-partie-1)
- [Donnez un Microfrontend à vos Microservices | by Yann L | Medium](https://medium.com/@ylerjen/donnez-un-microfrontend-%C3%A0-vos-microservices-f6c422b2bb46)
- [Micro Frontend: le casse tête des micro services étendu au FrontEnd ! (Audrey Neveu) - YouTube](https://www.youtube.com/watch?v=f6_99ExOvWs)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.