6 risposte
App router con server components è davvero il percorso giusto adesso, ma quello che molti trascurano è pensare bene alla strategia di data fetching fin dall'inizio - se cominci a fare fetch ovunque senza un pattern chiaro (cache, revalidation, client vs server), dopo diventa un casino difficile da refactorizzare. Vale la pena dedicare un po' di tempo all'inizio del progetto per definire come i tuoi dati fluiranno.
non esiste un modo unico "migliore" perché dipende molto dalla dimensione e dal tipo del progetto, ma la maggior parte della gente sta usando app router con server components, typescript, e organizzando per features invece che per tipo di file - questo rende tutto più scalabile e meno un caos quando il progetto cresce.
Next.js 2026 è in un punto stabile con l'app router consolidato, ma la verità è che molta gente struttura male perché non pensa alla scalabilità dal progetto uno. Quando cominci, è facile cadere nella trappola di mescolare logica di server con componenti client, e dopo diventa un caos cercare di refatorizzare. Quello che funziona bene è separare le cartelle non solo per feature, ma soprattutto avere una struttura chiara di dove le cose vengono fetched e processate.
Una cosa pratica che pochi menzionano: creare un file di configurazione centralizzato per variabili d'ambiente e endpoint dal principio. Non è glamouroso, ma evita duplicazione mostruosa dopo. Tipo, invece di spargere URL dell'API in vari file, avere un `src/config/api.ts` che importi da tutte le parti ti fa risparmiare ore. Vale anche la pena pensare presto a come gestirai i dati cache e revalidation - Next.js offre varie opzioni (ISR, revalidateTag, ecc), ma bisogna scegliere in base a quello che realmente ti serve, non copiare quello che hai visto in un tutorial.
La struttura di cartelle in sé può seguire pattern come `(group)` per route correlate, `_components` per componenti privati della feature, e `_lib` per utility locali. Il punto critico è mantenere server components come standard e fare client components solo quando realmente hai bisogno di interattività - questo risolve metà dei problemi di performance da solo.
Qual è la dimensione del tuo progetto, un piccolo MVP o qualcosa che crescerà? Quello che manca nella conversazione precedente è parlare di osservabilità fin dall'inizio - logging, monitoraggio delle performance, quelle cose che sembrano noiose ma fanno tutta la differenza quando il progetto inizia a crescere. La maggior parte delle persone ci pensa solo quando ha già problemi, e allora diventa molto più complicato refactorizzare.
Quello che funziona davvero è separare la logica di business dall'interfaccia dal primo giorno - crei una cartella `lib` o `core` con funzioni pure che non sanno niente di React, poi le riusi in server components, client components, API routes, tutto. La maggior parte struttura tutto attaccato al componente e poi rimane bloccata. Un'altra cosa pratica: se il progetto va a crescere, metti già uno schema di validazione (Zod, Yup, quello che preferisci) nel mezzo tra la richiesta e il database - risparmi tonnellate di debug dopo quando stai cercando di capire perché un campo è arrivato undefined in un posto random del flusso.
Quando struturo un progetto, quello che funziona davvero è stabilire convenzioni chiare dal primo giorno - cartelle per feature dentro a app, ma con un layer di servizi separato per la logica riutilizzabile! La gente rimane intrappolata a discutere app router versus pages router, ma il vero problema emerge dopo quando hai 50 pagine e nessuno sa dove mettere un utility di validazione. Il mio suggerimento è creare uno standard: `app/(features)/[feature]/(routes)/page.tsx`, `lib/services/` per la logica pesante, e `lib/utils/` per cose semplici. Dopo investi tempo a configurare un `.env` robusto e validazione delle variabili al boot dell'applicazione - evita di pentirti in produzione!
La tua risposta
Accediper rispondere.