Ölçeklenen Next.js / TypeScript mimarisi: spagettiye dönmeyen production tasarımı
Bir yıl sonra spaghetti’ye dönmeyecek Next.js proje yapısı ve üretime hazır mimari nasıl tasarlanır? Klasör, sıkı typing, state ve render için pratik ipuçları.
Next.js geliştiriciye muazzam esneklik verir: kutudan SSG, SSR ve istemci güncellemeleri. Bu esneklik iki ucu keskin. Birinci günden sıkı, düşünülmüş mimari yoksa hızla büyüyen projeler aylar içinde bakılamaz spaghetti klasörlerine döner.
Ölçeklenen Next.js ve TypeScript mimarisi; dosya düzeni kuralları, sıkı derleyici ayarları, ayrılmış state katmanları ve akıllı hibrit render sınırları ister.
Dizin yapısı: düz klasörlerin ötesine
Uygulama büyüyünce tüm bileşenleri tek `/components` klasörüne koymak çöker. Bunun yerine feature-based yapı: ilgili bileşen, hook, asset ve API hook’ları birlikte yaşar:
- Paylaşılan UI (/src/components): bu dizini temiz tutun. Yalnızca yeniden kullanılabilir, genel UI (buton, badge, input, modal); domain iş mantığı import etmez.
- Feature modülleri (/src/features veya /src/modules): bileşen, custom hook ve API servislerini iş alanına göre gruplayın (/features/auth, /checkout, /dashboard). Mantık kapsüllenir; kodu taşımak veya refactor etmek kolaylaşır.
- Sayfa colocation (App Router): sayfaya özel client bileşen, şema veya server action’ı doğrudan route klasörüne koyun. Kod kullanıldığı yerin yanında dursun; dev ağaçlarda avlanmayın.
Sıkı TypeScript: üretim hatalarına kalkanınız
TypeScript sadece sözdizimi aracı değildir; uygulama veri akışının canlı sözleşmesidir. Ölçeklenen mimari, hataları derlemede yakalamak için sıkı config kullanır:
- Strict mode açın: tsconfig.json’da `"strict": true`. Örtük tipler ve null-pointer olmasın.
- «any» tipini tamamen yasaklayın: girdi ve API dönüşlerini her zaman tipleyin. Harici API yanıtları için `unknown`, runtime’da şema ile doğrulayın (Zod veya Valibot).
- Utility type’ları kullanın: Pick, Omit, Partial, Record ile temiz tip kalıtımı; bildirim kopyalamayın.
Temiz state yönetimi stratejisi
Sık mimari hata: tüm veriyi tek global istemci store’una (Redux veya Zustand) koymak. State’i doğasına göre ayırın:
- Server state (API verisi): Next.js fetch veya TanStack Query (React Query) gibi sunucu cache araçları. API payload’ını global client state’e elle kopyalamayın.
- Global UI state: uzak birden fazla bileşeni etkileyen (auth, sepet, dark mode). Zustand gibi hafif client store.
- Yerel bileşen state’i: useState/useReducer ile duruma mümkün olduğunca yakın tutun. Erken global optimizasyondan kaçının.
Server Components (RSC) ve client sınırlarını en üstte tutmak
Next.js App Router, React Server Components (RSC) üzerine kurulur. Ölçeğe hazır temiz tasarım varsayılanı Server Components yapar; etkileşimi render ağacının yapraklarına iter:
- Varsayılan Server Components: veriyi çekin, statik grid, header ve footer’ı sunucuda render edin; client bundle küçük kalsın.
- Client Components’i yalıtın: `"use client"` yalnızca olay, tarayıcı API’si veya state isteyen yapraklara (arama butonu, interaktif slider).
- Kompozisyon kalıbı: Client Components’i children veya props olarak Server Components’e verin; statik sunucu layout’unun içinde dinamik client UI.
Kurumsal hazır frontend mimarilerini nasıl kuruyorum
Temiz, ölçeklenen Next.js ve TypeScript kod tabanı; deneyimli teknik öngörü, özel config ve bileşen tutarlılığı ister.
Büyük Next.js ve React ürünlerini kurma, audit ve refactor’de uzmanlaştım. 8+ yıl üretim, 4.200+ Upwork saati, 100+ canlı sistem: eski teknik borcu, feature’ı hızlandıran, Core Web Vitals’i iyileştiren ve yıllarca düzgün ölçeklenen modül odaklı mimariyle değiştiririm.
Yeni bir web ürünü mü başlıyorsunuz, yoksa mevcut Next.js kodunu mu yeniden yapılandıracaksınız? Mimari audit ve proje planı için aşağıdaki iletişim bölümünden yazın.
Sadece okumak değil, kurmak mı lazım?
Web app geliştirme: Next.js, React, PostgreSQL. Doğrudan yüklenici.
Projenizi konuşalım mı?
React ve Next.js konusunda uzman kıdemli bir web geliştiriciyim - dünya çapında freelance projelere açığım.
E-posta
i.vynnychenko@gmail.comKonum
Kyiv, Ukrayna
Upwork
Profili görüntüleTelegram
Bana yazınViber
Bana yazın