- 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.