Published on

Haqiqiy loyihani tashkil etish

Authors

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
PapkaNima 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 nomiTarkibi
BookListView.swiftKitoblar ro'yxatini ko'rsatadigan SwiftUI ko'rinish
BookDetailView.swiftBitta kitob tafsilotlari uchun ko'rinish
BookViewModel.swiftBooks feature uchun @Observable view model
BookRepository.swiftProtokol va uning implementatsiyalari
Book.swiftBook modeli/struct
BookRow.swiftRo'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

QoidaSababi
Feature bo'yicha guruhlag, tur bo'yicha emasFeature ustida ishlayotganda hammasi bir joyda
Bir faylda bitta turXcode navigatori foydali indeks bo'ladi
Faylni tarkibi nomiga qarab nomlangBookViewModel.swift, BookListView.swift β€” noaniqlik yo'q
Private subview larni ota faylida qoldiringFayl sonini kamaytiradi, hech narsani yashirmaydi
Shared/ ni cross-feature kod uchunFeature-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.

Buy mea coffee