Published on

Nima uchun arxitektura muhim

Authors

Ko'p yangi iOS dasturchilar bir xil yo'l tutadi: ishlaydi deb loyihani o'stirishda davom etadi. Keyin β€” bir necha hafta o'tgach β€” loyihaga qaytib, kodni o'qishning imkoni yo'q. Nimani o'zgartirish kerak bilmaydi. Bitta qoidani o'zgartirsam boshqa narsa sinib qoladi.

Muammo viewdadir. Bunday qo'rqinchli ko'rinishni ko'rganmisiz:

struct VazifalarKorinishi: View {
    @State private var vazifalar: [String] = []
    @State private var yangiVazifaMatni = ""
    @State private var xatoXabar: String? = nil
    @State private var yuklanmoqda = false

    var body: some View {
        NavigationStack {
            VStack {
                TextField("Yangi vazifa", text: $yangiVazifaMatni)

                Button("Qo'shish") {
                    // Validatsiya logikasi tugma ichida
                    let tozalangan = yangiVazifaMatni.trimmingCharacters(in: .whitespaces)
                    guard !tozalangan.isEmpty else {
                        xatoXabar = "Vazifa bo'sh bo'lishi mumkin emas."
                        return
                    }
                    guard tozalangan.count <= 100 else {
                        xatoXabar = "Vazifa juda uzun."
                        return
                    }
                    // Ma'lumot o'zgarishi ham tugma ichida
                    vazifalar.append(tozalangan)
                    yangiVazifaMatni = ""
                    xatoXabar = nil
                }

                // Filtrlash β€” ko'rinish ichida ma'lumot almashtirish
                List(vazifalar.filter { filterMatni.isEmpty || $0.localizedCaseInsensitiveContains(filterMatni) }, id: \.self) {
                    Text($0)
                }

                // Tarmoq so'rovi β€” butunlay boshqa ish, hali viewda
                Button("Serverdan yuklash") {
                    yuklanmoqda = true
                    Task {
                        let url = URL(string: "https://api.example.com/tasks")!
                        let (data, _) = try await URLSession.shared.data(from: url)
                        let decoded = try JSONDecoder().decode([String].self, from: data)
                        vazifalar = decoded
                        yuklanmoqda = false
                    }
                }
            }
        }
    }
}

Bu ko'rinish bir vaqtda to'rtta turli ish qilyapti: UI render, validatsiya, ma'lumot almashtirish, tarmoq so'rovi. Har biri boshqasi bilan chalkashgan.

Yaxshi arxitektura nima beradi

O'qish osonligi
Faqat UI ni ko'rsatadigan ko'rinish oson o'qiladi. Faqat biznes logikasini saqlaydigan view model oson tushuniladi. Loyihaga uch hafta o'tgach qaytganingizda qayerda nima borligini aniq bilasiz.

O'zgaruvchanlik
Validatsiya logikasi viewda bo'lsa β€” uni o'zgartirish uchun butun ko'rinishni tushunish kerak. U alohida turda bo'lsa β€” bir joyda o'zgartirasiz, boshqa hech narsa bilishi shart emas.

Sinash imkoniyati
300 qatorlik aralash logikali ContentView uchun oson test yozib bo'lmaydi. Lekin qisqa, maqsadli tur uchun β€” vazifa nomini tekshirib, uzoq bo'lsa xato qaytaradigan tur uchun β€” simulyatorsiz test yozish mumkin.

Bu bosqichning maqsadi

Mavjud barcha arxitektura patternlarini yodlash shart emas. Faqat instinktni rivojlantirish kerak: "Bu kod bu yerga tegishli emasmi?"

Javob "yo'q" bo'lsa β€” keyingi besh dars sizga u qayerga borishi kerakligini aytadi.

Tezkor ma'lumotnoma

MuammoSababiYechim
Ko'rinish o'qish qiyinKo'p turli ishlar bitta joydaConcern larni ajratish
O'zgartirish boshqa narsani sindiradiLogika bir-biriga o'ralganHar bir ish o'z joyida
Test yozib bo'lmaydiKo'rinish logikani o'z ichida yashiradiLogikani alohida turga ko'chirish

🎯 Topshiriq: o'z kodingizni tekshiring

Avval yozgan loyihalaringizdan birini oching. Eng katta ko'rinish faylini ko'ring va uchta savolga javob yozing:

  1. Bu ko'rinish nechta turli ish qilyapti? (ma'lumot olish, matn formatlash, validatsiya, ro'yxat ko'rsatish...)
  2. Qaysilari ko'rinishga tegishli, qaysilari emas?
  3. Biror formadagi validatsiya qoidasini o'zgartirsangiz β€” necha qator kodga tegishingiz kerak?

Hozir hech narsani o'zgartirmang β€” muammoni aniq ko'rish yetarli.

Buy mea coffee