- Published on
Haqiqiy loyihani tashkil etish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Arxitektura patternlari faqat yarmini hal qiladi. Ikkinchi yarmi — fayl va papka tuzilmasi: hamma narsa diskda qayerda turadi.
10 tadan ko'p fayl bo'lganda tuzilma muhimroq bo'la boshlaydi. Feature-based tashkil etish kengayib boradigan ilovalar uchun yaxshi ishlaydi — Books feature ustida ishlayotganingizda barcha tegishli fayllar bitta joyda.
Tavsiya etilgan feature-based tuzilma
MeningIlovam/
├── App/
│ ├── MeningIlovam.swift ← Ilova kirish nuqtasi, @main
│ └── AppConstants.swift ← Ilova-darajadagi konstantalar
│
├── Features/
│ ├── Books/
│ │ ├── BookListView.swift
│ │ ├── BookDetailView.swift
│ │ ├── BookViewModel.swift
│ │ └── BookRepository.swift
│ │
│ ├── Profile/
│ │ ├── ProfileView.swift
│ │ ├── ProfileViewModel.swift
│ │ └── ProfileRepository.swift
│ │
│ └── Settings/
│ ├── SettingsView.swift
│ └── SettingsViewModel.swift
│
├── Shared/
│ ├── Models/
│ │ ├── Book.swift ← Ko'p feature da ishlatiladigan model
│ │ └── User.swift
│ │
│ ├── Components/
│ │ ├── LoadingView.swift ← Qayta ishlatiladigan UI komponent
│ │ ├── EmptyStateView.swift
│ │ └── BookRow.swift ← Ko'p joyda ishlatiladigan qator
│ │
│ ├── Services/
│ │ ├── NetworkService.swift
│ │ └── AnalyticsService.swift
│ │
│ └── Extensions/
│ ├── String+Extensions.swift
│ └── Date+Formatting.swift
| Papka | Nima saqlash |
|---|---|
App/ | Kirish nuqtasi, environment sozlash, ilova-darajadagi konfiguratsiya |
Features/Books/ | Books feature ga tegishli barcha narsalar: ko'rinish, view model, repository |
Shared/Models/ | Bir nechta feature da ishlatiladigan ma'lumot modellari |
Shared/Components/ | Bir nechta joyda qayta ishlatiladigan UI komponentlar |
Shared/Services/ | Ilova bo'ylab xizmatlar: tarmoq, analitika, autentifikatsiya |
Shared/Extensions/ | Foydali usullar qo'shadigan Swift kengaytmalari |
Fayl nomlash konventsiyalari
| Fayl nomi | Tarkibi |
|---|---|
BookListView.swift | Kitoblar ro'yxatini ko'rsatadigan SwiftUI ko'rinish |
BookDetailView.swift | Bitta kitob tafsilotlari uchun ko'rinish |
BookViewModel.swift | Books feature uchun @Observable view model |
BookRepository.swift | Protokol va uning implementatsiyalari |
Book.swift | Book modeli/struct |
BookRow.swift | Ro'yxat ichida ishlatiladigan qayta ishlatiladigan qator komponenti |
Tashkil etish qoidalari
// ✅ Bir faylda bitta tur — yaxshi
// BookViewModel.swift — faqat BookViewModel
@Observable class BookViewModel { ... }
// ❌ Bir faylda aralash turlar — yomon
// BookViewModel.swift — ko'p turni aralashtirib yuboradi
@Observable class BookViewModel { ... }
struct NetworkBookRepository { ... } // Bu alohida faylga tegishli
// ✅ Faqat shu faylda ishlatiladigan private subview lar birga bo'lishi mumkin
// BookListView.swift
struct BookListView: View {
var body: some View {
List { BookRowView() }
}
}
// Bitta faylda — private, qayta ishlatilmaydi
private struct BookRowView: View {
var body: some View { Text("Bitta kitob") }
}
// ✅ Protokolga moslik alohida extension faylida
// Book+Identifiable.swift
extension Book: Identifiable {
var id: UUID { uuid }
}
// Book+Comparable.swift
extension Book: Comparable {
static func < (lhs: Book, rhs: Book) -> Bool {
lhs.sarlavha < rhs.sarlavha
}
}
Fayl ajratish qachon kerak
Ko'rinishni alohida faylga ajratish kerak:
- Ko'p joyda ishlatiladigan bo'lsa
- 100 qatordan oshsa — ehtimol juda ko'p ish qilyapti
- Aniq otli nomga ega bo'lsa (
BookRow,ProfileHeader)
Tezkor ma'lumotnoma
| Qoida | Sababi |
|---|---|
| Feature bo'yicha guruhlag, tur bo'yicha emas | Feature ustida ishlayotganda hammasi bir joyda |
| Bir faylda bitta tur | Xcode navigatori foydali indeks bo'ladi |
| Faylni tarkibi nomiga qarab nomlang | BookViewModel.swift, BookListView.swift — noaniqlik yo'q |
| Private subview larni ota faylida qoldiring | Fayl sonini kamaytiradi, hech narsani yashirmaydi |
Shared/ ni cross-feature kod uchun | Feature-specific va qayta ishlatiladigan kod orasida aniq chegara |
🎯 Topshiriq: loyihani qayta tashkil etish
Ushbu bosqich davomida qurib kelayotgan loyihangizni oching. Yuqoridagi tuzilmani yarating: App/, Features/ (har bir feature uchun papka), Shared/Models/, Shared/Components/. Mavjud fayllaringizni to'g'ri papkalarga ko'chiring. Konventsiyaga uymagan fayllarni qayta nomlang. Qayta tashkil etishdan keyin loyiha build bo'lishini tasdiqlang.