- Published on
Nima uchun arxitektura muhim
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
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
| Muammo | Sababi | Yechim |
|---|---|---|
| Ko'rinish o'qish qiyin | Ko'p turli ishlar bitta joyda | Concern larni ajratish |
| O'zgartirish boshqa narsani sindiradi | Logika bir-biriga o'ralgan | Har bir ish o'z joyida |
| Test yozib bo'lmaydi | Ko'rinish logikani o'z ichida yashiradi | Logikani 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:
- Bu ko'rinish nechta turli ish qilyapti? (ma'lumot olish, matn formatlash, validatsiya, ro'yxat ko'rsatish...)
- Qaysilari ko'rinishga tegishli, qaysilari emas?
- Biror formadagi validatsiya qoidasini o'zgartirsangiz β necha qator kodga tegishingiz kerak?
Hozir hech narsani o'zgartirmang β muammoni aniq ko'rish yetarli.