En tant que développeur, j’accorde une attention particulière à la lisibilité, la modularité et la maintenabilité de mon code. C’est pourquoi j’ai adopté l’approche Atomic Design dans la structuration de mes projets front-end, notamment sous Nuxt 3.
Comprendre l’Atomic Design
Conçue par Brad Frost, l’Atomic Design repose sur un principe simple : décomposer l’interface en briques réutilisables, hiérarchisées selon cinq niveaux :
- Atomes : les plus petits composants de l’interface. Ce sont par exemple un bouton, un champ texte, une icône, ou un tag. Ils ne fonctionnent pas forcément seuls, mais constituent la base de tout le reste.
- Molécules : un assemblage d’atomes qui forment un ensemble fonctionnel. Par exemple, un champ avec son label et son message d’erreur constitue une molécule.
- Organismes : des structures plus complexes, souvent des sections entières composées de plusieurs molécules ou atomes. Un header complet ou une carte produit avec image, titre et CTA sont des organismes.
- Templates : les squelettes de pages. Ils placent les organismes dans une disposition globale sans contenu réel.
- Pages : la version finale avec du contenu réel injecté. Elles permettent de valider la structure et la cohérence visuelle.
Application concrète dans Nuxt 3
Dans mes projets Nuxt 3, je structure les composants de la manière suivante :
components/
atoms/
Button.vue
Icon.vue
Input.vue
molecules/
FormGroup.vue
CardHeader.vue
organisms/
ArticleCard.vue
Header.vue
Footer.vue
templates/
BlogLayout.vue
LandingLayout.vue
layouts/
default.vue
admin.vue
Chaque dossier a un rôle bien défini. Par exemple, atoms/Button.vue
contient un composant de bouton générique que je peux réutiliser partout. Dans molecules/FormGroup.vue
, je rassemble un label, un champ, et un message d’erreur. organisms/Header.vue
regroupe logo, navigation, bouton de contact, etc.
Les templates
sont utilisés pour les pages types comme un blog ou une page d’accueil, sans le contenu dynamique. Enfin, layouts/
gère l’enrobage global (head, transition, etc.) à l’échelle du projet Nuxt.
Ce que ça change dans mon travail
Cette architecture m’apporte plusieurs bénéfices :
- Une meilleure scalabilité : je peux faire évoluer chaque brique sans impacter les autres.
- Un design system cohérent : chaque composant suit des règles claires, facilitant la collaboration avec les designers.
- Une maintenance plus simple : le découpage logique permet de vite localiser et corriger un bug ou améliorer un comportement.
Impact sur les performances de l’application
En structurant l’application avec Atomic Design, je limite les composants redondants et j’encourage la réutilisation systématique des blocs existants. Cela se traduit concrètement par :
- Moins de code dupliqué, donc des bundles plus légers.
- Une meilleure gestion du lazy-loading des composants via
defineAsyncComponent
oudynamic import
, optimisée par Nuxt 3. - Une réduction du travail de rendu côté client, puisque les composants sont souvent plus petits, plus simples, et mieux compartimentés.
Résultat : le site se charge plus vite, les interactions sont plus fluides, et la structure globale reste performante même à mesure que le projet grandit.
En savoir plus :
https://atomicdesign.bradfrost.com/chapter-2
https://vuejs.org/guide/best-practices/performance#code-splitting