Frontend Arxitektura
Frontend arxitektura – bu frontend ilovasining tuzilishi va tashkiliy modeli.
Frontend Arxitekturasi (Architect Frontend)
Kirish
Frontend arxitekturasi — bu ilovangizni tashkillashtirish va uzluksiz rivojlantirish uchun asosiy printsiplar, papka strukturalari, kod modullari, va ish jarayonlari to‘plami. Yaxshi arxitektura:
- 📈 Masshtablanadi (Scalable)
- 🛠️ Texnik xizmat ko‘rsatish oson (Maintainable)
- ⚡️ Ishlash tez (Performant)
- 👥 Jamoa bilan hamkorlik qulay (Collaborative)
🏗️ Asosiy Arxitektura Prinsiplari
- Separation of Concerns (SoC)
– UI, biznes logika va ma’lumot qatlamini alohida saqlash - Single Responsibility Principle
– Har bir modul yoki komponent bitta vazifani bajaradi - Don’t Repeat Yourself (DRY)
– Kodni qayta ishlatish; util va hook’lar yaratish - Domain-Driven Design (DDD) printsiplari
– Loyihaning asosiy domenlari bo‘yicha bo‘limlash - Convention over Configuration
– Bir xil nom berish, standart yo‘llar, ESLint/Prettier
Papka Struktura
1.1. Atomic Design
src/
├── components/
│ ├── atoms/ # Butun ilovada qayta ishlatiladigan eng kichik UI bo‘laklari
│ ├── molecules/ # Atoms’ni birlashtirgan kichik bloklar
│ ├── organisms/ # Molecules + atoms dan tashkil topgan katta bloklar
├── pages/ # Next.js yoki routelar uchun sahifalar
├── layouts/ # Umumiy sahifa tartibi (header, footer)
├── hooks/ # Custom React hook’lar (useAuth, useFetch)
├── services/ # API chaqiruvlar, biznes logika
├── utils/ # Yordamchi funksiyalar, formatlash
└── assets/ # Rasm, font, stil fayllari
1.2. Feature-Based (Modulga Asoslangan)
src/
├── features/
│ ├── auth/
│ │ ├── components/
│ │ ├── hooks/
│ │ ├── services/
│ ├── cart/
│ │ ├── components/
│ │ ├── redux/ # Redux Toolkit slice’lari
│ │ └── utils/
├── common/ # Shared komponentlar, util va hook’lar
└── config/ # Global sozlamalar (API URL, theme)
Separation of Concerns (SoC)
- UI-komponentlar:
– Faqat
props
qabul qiladi va render qiladi. - Container/Stateful komponentlar:
–
useState
,useEffect
, yoki Redux bilan holatni boshqaradi. - Service/API qatlam:
– Tashqi API chaqiruvlari (
fetch
/axios
), error handling, retries. - Utils/Helpers: – Formatlash, date manipulyatsiya, debounce/throttle funksiyalari.
Komponent Namunalari
Container vs Presentational
// Presentational – UserCard.tsx
export function UserCard({ user }) {
return (
<div className='card'>
<h3>{user.name}</h3>
<p>{user.email}</p>
</div>
)
}
// Container – UserProfile.tsx
import { useEffect, useState } from 'react'
import { UserCard } from './UserCard'
export function UserProfile({ userId }) {
const [user, setUser] = useState(null)
useEffect(() => {
fetch(`/api/users/${userId}`)
.then(r => r.json())
.then(setUser)
}, [userId])
return user ? <UserCard user={user} /> : <p>Loading...</p>
}
State Arxitekturasi
- Local State (
useState
,useReducer
) - Shared State (
Context API
) - Global State (
Redux Toolkit
, Zustand) - Side Effects (
Redux-Saga
,React Query
yokiSWR
)
// Redux Toolkit slice misoli
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'
export const fetchItems = createAsyncThunk('items/fetch', async () =>
(await fetch('/api/items')).json()
)
const itemsSlice = createSlice({
name: 'items',
initialState: { list: [], status: 'idle' },
extraReducers: builder => {
builder
.addCase(fetchItems.pending, s => {
s.status = 'loading'
})
.addCase(fetchItems.fulfilled, (s, a) => {
s.list = a.payload
s.status = 'succeeded'
})
},
})
export default itemsSlice.reducer
Data Fetch & Caching
- React Query / SWR: avtomatik caching, refetch on focus, background updates.
- Custom Hooks (
useFetch
): error, loading, retry, pagination.
Styling Arxitekturasi
- CSS Modules
- Styled Components / Emotion
- Utility-First (
Tailwind CSS
) - Design Tokens (Theme, spacing, color variables)
/* Button.module.css */
.button {
@apply px-4 py-2 rounded-lg bg-blue-600 text-white;
}
Performance & Code Splitting
- React.lazy + Suspense
- Webpack Dynamic Imports
- Route-Based Splitting
- Bundle Analyzer:
webpack-bundle-analyzer
const AdminPanel = React.lazy(() => import('./AdminPanel'))
// …
;<Suspense fallback={<Spinner />}>
<AdminPanel />
</Suspense>
Testing Arxitekturasi
- Unit Tests: fayl yonida (
Component.test.tsx
) - Integration Tests: komponent va service birga
- Mocks & Fixtures:
msw
bilan API mocking - E2E: Cypress + CI/CD integratsiya
Build & Deployment
- Monorepo (
turborepo
,nx
) yoki Polyrepo - CI/CD: GitHub Actions / GitLab CI
- Static Hosting: Vercel, Netlify
- Containerize: Docker + Kubernetes
Xulosa
Yaxshi frontend arxitektura quyidagilarni ta’minlaydi:
- 🔄 Qayta foydalanish
- 📦 Modullilik
- ⚡️ Yuqori performance
- 🛠️ Oson texnik xizmat
- 👥 Jamoaviy hamkorlik
Keyingi qadam: ushbu printsiplarni amaliy loyihangizga tatbiq qilib, ”Architect Frontend” bo‘lib ulguring!