6 réponses

★ Meilleure réponse

Le routeur app avec les server components est vraiment la voie à suivre maintenant, mais ce que beaucoup de gens oublient, c'est de bien réfléchir à la stratégie de data fetching dès le début - si tu commences à faire des fetch partout sans un schéma clair (cache, revalidation, client vs server), après ça devient un chaos difficile à refactoriser. Ça vaut le coup de consacrer du temps au début du projet pour définir comment tes données vont circuler.

y a pas une seule façon "meilleure" parce que ça dépend beaucoup de la taille et du type du projet, mais la plupart des gens utilisent app router avec server components, typescript, et organisent par features plutôt que par type de fichier - ça rend tout plus scalable et moins un bordel quand le projet grandit.

Next.js 2026 est dans un point stable avec l'app router consolidé, mais la vérité c'est que beaucoup de gens structurent mal parce qu'ils ne pensent pas à la scalabilité dès le projet un. Quand tu commences, c'est facile de tomber dans le piège de mélanger la logique serveur avec les composants client, et après ça devient un chaos d'essayer de refactoriser. Ce qui marche bien c'est séparer les dossiers non seulement par features, mais surtout d'avoir une structure claire de où les choses sont fetched et traitées.

Un truc pratique que peu de gens mentionnent : créer un fichier de configuration centralisé pour les variables d'environnement et endpoints dès le début. C'est pas glamoureux, mais ça évite une duplication monstrueuse après. Genre, au lieu de balancer les URLs de l'API dans plusieurs fichiers, avoir un `src/config/api.ts` que tu importes partout ça économise des heures. Ça vaut aussi le coup de penser tôt à comment tu vas gérer le cache des données et la revalidation - Next.js offre plusieurs options (ISR, revalidateTag, etc), mais faut choisir basé sur ce que tu as vraiment besoin, pas copier ce que tu as vu dans un tuto.

La structure de dossiers en elle-même peut suivre des patterns comme `(group)` pour les routes liées, `_components` pour les composants privés de la feature, et `_lib` pour les utilitaires locaux. Le point critique c'est de garder les server components comme défaut et seulement faire des client components quand tu as vraiment besoin d'interactivité - ça résout la moitié des problèmes de performance tout seul.

Quel est la taille de ton projet, un petit MVP ou quelque chose qui va grandir ? Ce qui manque dans la conversation précédente, c'est de parler d'observabilité dès le départ - logging, monitoring de performance, ces trucs qui semblent chants mais qui font toute la différence quand le projet commence à grandir. La plupart des gens n'y pensent que quand ils ont déjà des problèmes, et là ça devient beaucoup plus compliqué à refactoriser.

Ce qui marche vraiment c'est de séparer la logique métier de l'interface dès le départ - tu crées un dossier `lib` ou `core` avec des fonctions pures qui ne savent rien de React, puis tu les réutilises dans les server components, les client components, les routes API, partout. La plupart des gens structurent tout collé au composant et après ils se retrouvent coincés. Un autre truc pratique : si le projet va grandir, mets déjà un schéma de validation (Zod, Yup, ce que tu préfères) entre la requête et la base de données - ça t'épargne des tonnes de debug plus tard quand tu essaies de comprendre pourquoi un champ est arrivé undefined à un endroit aléatoire du flux.

Quand je structure un projet, ce qui marche vraiment c'est d'établir des conventions claires dès le départ - des dossiers par feature dans app, mais avec une couche de services séparée pour la logique réutilisable ! Les gens restent bloqués à discuter app router versus pages router, mais le vrai problème apparaît après quand tu as 50 pages et personne ne sait où mettre un utilitaire de validation. Ma suggestion c'est de créer un pattern : `app/(features)/[feature]/(routes)/page.tsx`, `lib/services/` pour la logique lourde, et `lib/utils/` pour les trucs simples. Après tu investis du temps à configurer un `.env` robuste et la validation des variables au boot de l'application - ça t'évite d'avoir des regrets en production !

Votre réponse

Se connecterpour répondre.