KISS (Keep It Simple, Stupid) — tizimning maksimal soddaligini talab qiladigan ishlab chiqish prinsipi. Murakkablik faqat mutlaqo zarur bo'lganda qo'shilishi kerak, zaxira uchun emas. IEEE Transactions on Software Engineering (2020) tadqiqotiga ko'ra, kod murakkabligi defekt zichligi bilan korrelyatsiya qiladi: yuqori siklomatik murakkablikka ega modullar har ming qatorga 3,6 marta ko'proq xatolikka ega. KISS — primitivlik emas, balki ishlaydigan yechimlardan eng sodda-sining ongli tanlovi.
Asosiy fikrlar
KISS (Keep It Simple, Stupid) — tizim murakkabligini minimallashtirishni talab qiladigan dizayn prinsipi. AQSh Harbiy Dengiz Kuchlarida 1960-yillarda muhandis Kelly Johnson (Lockheed SR-71 Blackbird) tomonidan shakllantirilgan. Johnson samolyotni dala sharoitida mexanik maxsus asboblarsiz ta'mirlay olishini talab qilgan — KISS ning mohiyati shu.
Dasturiy ta'minot ishlab chiqishda KISS degani: yechim imkon qadar sodda bo'lishi kerak, lekin sodda-roq emas (ikkinchi qism Albert Eynshteynga tegishli). Soddalik — primitivlik sinonimi emas; sodda yechim vazifani minimal ortiqchalik bilan bajaradi.
Google Research (2022) tadqiqoti ko'rsatdi: yangi dasturchi uchun loyihaga kirish o'rtacha vaqti KISS ga rioya qilinadigan loyihalarda 3 hafta, haddan tashqari arxitekturali loyihalarda 10 hafta. Sodda kod — jamoa yangi a'zolarining moslashish tezligiga sarmoyadir.
KISS ni filtr sifatida qo'llang: yangi abstraksiya qo'shishdan oldin o'zingizdan so'rang “bu bugun paydo bo'lgan muammoni hal qiladimi yoki bir yildan keyin paydo bo'lishi mumkin bo'lgan muammonimi?” Agar ikkinchisi bo'lsa — qilmang.
Okkam ustarasi (XIV asr) — falsafiy prinsip: “mavjudotlarni zaruratsiz ko'paytirmang”. Dasturlashda bu degani: talablarni bir xil darajada qondiradigan ikkita yechimdan kamroq mavjudotga (sinf, modul, bog'liqlik) ega bo'lganini tanlang. KISS — Okkam ustarasining koddagi amaliy tatbiqidir.
Farq shundaki, Okkam ustarasi umumiy bilish prinsipi, KISS esa o'lchanadigan natijaga ega aniq muhandislik amaliyotidir: siklomatik murakkablikni kamaytirish, kod qatorlari sonini qisqartirish, code review vaqtini qisqartirish. Metrikalar KISS ga rioya qilishni ob'ektiv baholashga imkon beradi.
Metrikaga amal qiling: kod “etarlicha sodda” hisoblanadi, agar yangi dasturchi fragmentni bir daqiqa ichida sharhlarsiz tushunsa. Agar ko'proq kerak bo'lsa — soddalashtiring.
Mobil ishlab chiqish KISS ni ayniqsa muhim qiladigan uchta xususiyatga ega: cheklangan qurilma resurslari (xotira, protsessor), platformalarning tez-tez yangilanishi (iOS har yili, Android — har chorak) va CI/CD orqali funksiyalarni tezkor yetkazib berish zarurati. Murakkab kod bu tempga chidamaydi.
Apple WWDC 2023: “Embrace Swift Generics” tahlili shuni ko'rsatdiki: o'rtacha iOS loyihasida 40–60% “o'lik kod” bor — kelajak uchun yozilgan, lekin hech qachon ishlatilmaydigan abstraksiyalar. Bu kod nafaqat binar hajmini oshiradi, balki kompilyatsiyani sekinlashtiradi va navigatsiyani qiyinlashtiradi. KISS buning oldini oladi: faqat hozir kerak bo'lgan narsani yozing.
Android Developer Relations Report (2024) ma'lumotiga ko'ra, kodning testlarga nisbati past bo'lgan loyihalarda (1:0.8 dan kam) ishlab chiqarish xatolari 67% ko'proq. Murakkab kodni test qilish qiyin — bu sifat uchun bevosita tahdiddir. Soddalik — yuqori test qamrovi uchun zarur shartdir.
Kod murakkabligingizni metrikalar orqali o'lchang: siklomatik murakkablik (Cyclomatic Complexity) — har bir metodni 10 dan past, ideal 5 gacha ushlang. Avtomatik tekshirish uchun Detekt (Android) yoki SwiftLint (iOS) dan foydalaning.
Odatiy overengineering — bitta ma'lumot manbai bo'lgan loyihada abstrakt repository fabrikasi yaratish. Oddiy Repository class o'rniga dasturchi zanjir quradi: RepositoryFactory → IRepository → BaseRepository → RepositoryImpl — faraziy API o'zgarishi GraphQL uchun.
JetBrains Developer Survey (2023) so'roviga ko'ra, Android dasturchilarining 43% kamida bir marta refaktoring vaqtida arxitektura qatlamini olib tashlagan, chunki u ishlatilmagan. KISS deydi: abstraksiyani ikkinchi amalga oshirish varianti paydo bo'lganda yarating, kutish bilan emas.
Aniq amalga oshirishdan interfeyssiz boshlang. Ikkinchi ma'lumot manbai paydo bo'lganda — interfeysni refaktoring orqali ajrating (IDE buni avtomatik qiladi). Bu interfeysni oldindan yozishdan tezroq.
DI freymvorklari (Dagger, Hilt, Swinject) — kuchli vositalar, lekin ko'pincha murakkablashtirishga undaydi. Dasturchilar har bir ob'ekt uchun alohida modul yaratadi, hatto bir joyda ishlatilsa ham. KISS alternativi: oddiy holatlarda konstruktor orqali qo'lda inyeksiya.
// Overengineering: bitta repozitoriya uchun modul
@Module
object UserModule {
@Provides
fun provideUserRepo(): UserRepository = UserRepositoryImpl()
}
// KISS: qo'lda inyeksiya, repozitoriya bitta bo'lsa
class UserViewModel(
private val repo: UserRepository = UserRepositoryImpl()
) { /* ... */ }
Konstruktorda qo'lda inyeksiya — eng sodda DI namunasi. Kod generatsiyasi, annotatsiyalar va modullarni talab qilmaydi. DI freymvorkiga o'ting faqat loyiha 5+ ekranga yetganda va qo'lda inyeksiya qiyinlashganda.
Android ViewModel — tez-tez haddan tashqari murakkablik manbai. Dasturchilar oddiy MutableLiveData bilan postValue yetarli bo'lgan joyda StateFlow, combine, flatMapLatest va transformatsiya zanjirlarini qo'shadilar. KISS tavsiya qiladi: eng sodda yechimdan boshlang (LiveData), faqat aniq vazifa uchun murakkablashtiring (holatni tiklash, debounce).
// KISS: reaktiv zanjirlarsiz sodda ViewModel
class ProfileViewModel : ViewModel() {
private val _name = MutableLiveData<String>()
val name: LiveData<String> = _name
fun loadUser(id: String) {
viewModelScope.launch {
_name.postValue(repo.getUser(id).name)
}
}
}
Bu misolda ViewModel asinxron so'rov uchun coroutine, natijani e'lon qilish uchun LiveData ishlatadi. StateFlow yo'q, combine yo'q — faqat haqiqatan kerakli narsa. StateFlow qo'shing aniq holat bilan (UDF) bir tomonlama ma'lumot oqimi talab qilinganda.
iOS da KISS prinsipi ma'lumot modellari uchun sinflar (class) o'rniga strukturalar (struct) afzal ko'rilishida namoyon bo'ladi. Strukturalar value type, ARC orqali xotira boshqaruvi talab qilmaydi, sukut bo'yicha o'zgarmasdir. Sinflar faqat aynanlik (bir ob'ektga ikki havola) yoki meros zarur bo'lganda oqlanadi.
// KISS: model uchun class o'rniga struct
struct User: Codable {
let id: Int
let name: String
let email: String
}
// Overengineering: qo'lda init va deinit bilan class
class UserClass: NSObject {
let id: Int
init(id: Int) { self.id = id }
}
User strukturasi avtomatik ravishda memberwise init, Equatable va Hashable qo'llab-quvvatlashi (barcha maydonlar bo'yicha), o'zgarmaslik va ko'p oqimli muhitda xavfsizlikni oladi. Sinf qo'lda init, NSObject implementatsiyasini talab qiladi va umumiy holat orqali race conditions ga moyil.
Tarmoq qatlami — KISS tez-tez buziladigan yana bir soha. Dasturchilar 5+ elementli Interceptor zanjiri, abstrakt fabrikalar orqali seriyalash va har bir endpoint uchun mapperni qo'shadilar. KISS yechimi: konfiguratsiya bilan bitta URLSession va Codable/JSON orqali bitta dekodlash.
Apple: URLSession Programming Guide (2023) tavsiyalariga ko'ra, URLSession va Codable asosidagi sodda tarmoq qatlami mobil ilova stsenariylarining 95% ni qamrab oladi. Murakkab Interceptor zanjirlari faqat aniq holatlar uchun kerak: token yangilash, loglash, shifrlash.
URLSession + Codable asosidagi sodda tarmoq qatlamidan boshlang. Interceptorni haqiqiy ehtiyoj bo'yicha qo'shing, zaxira uchun emas. Bu tarmoq qatlami kodini 2–3 marta qisqartiradi.
Soddalik — primitivlik bilan bir xil emas. Sodda yechim — ixcham, tushunarli va vazifani ortiqchaliksiz hal qiladigan yechim. Primitiv — best practices va sog'lom arxitekturani e'tiborsiz qoldiradigan. Farq shundaki, sodda yechimni kengaytirish oson, primitivni esa — qiyin.
Misol: barcha ekranlar uchun yagona ob'ekt sifatida Activity dan foydalanish — bu primitivlik, soddalik emas. Soddalik — Navigation Component dan turli ekranlar uchun turli Fragment bilan foydalanish, ammo keraksiz abstraksiyalarsiz. KISS yomon arxitekturani oqlamaydi.
O'zingizni tekshiring: kodingiz yangi funksiya qo'shilganda o'zgarishi mumkinmi? Ha bo'lsa — soddalik to'g'ri. Agar har bir funksiya uchun hamma narsani qayta yozish kerak bo'lsa — bu primitivlik, shoshilinch refaktoring qiling.
Naqshlar (MVVM, MVI, Coordinator) — murakkablashtirish emas, balki strukturalashdir. KISS isbotlangan arxitektura naqshlaridan foydalanishni taqiqlamaydi. Ularning haddan tashqari qo'llanilishi taqiqlanadi: bittasi yetarli bo'lgan joyda uchta naqsh. Oltin o'rtacha — loyiha uchun bitta arxitektura naqshi va 2–3 yordamchidan (DI, Navigation) ko'p emas.
State of Mobile Architecture Report (2024) ga ko'ra, aynan bitta arxitektura naqshidan foydalanadigan loyihalar 3+ naqsh kombinatsiyasi bo'lgan “fransenshteyn” loyihalariga qaraganda birinchi rivojlanish yilida 34% kamroq xatolikka ega. Tanlang mobil loyiha uchun MVVM yoki MVI — va barcha ekranlarda unga rioya qiling.
Bir loyihada MVVM va MVI ni aralashtirmang. Agar jamoa MVVM ni tanlagan bo'lsa — butun loyiha MVVM ga rioya qilishi kerak. Istisno — o'z arxitektura yechimiga ega alohida funksiya modullari, ammo bu ongli tanlov bo'lishi kerak.
Tez-tez beriladigan savollar
KISS (Keep It Simple, Stupid) — kodni imkon qadar sodda qilishni talab qiladigan prinsip. Agar vazifani keraksiz sinflar, naqshlar va abstraksiyalarsiz hal qilish mumkin bo'lsa — ularsiz hal qiling. Sodda yechimni tushunish, test qilish va o'zgartirish oson.
DRY kod takrorlanishini taqiqlaydi, KISS — haddan tashqari murakkablikni. Ba'zan ular ziddiyatga keladi: takrorlanishni bartaraf etish urinishi (DRY) murakkab abstraksiyaga (KISS ni buzish) olib kelishi mumkin. Uch qoidasi (Rule of Three) muvozanatni saqlashga yordam beradi: faqat uchinchi takrorlanishdan keyin abstraksiya qiling.
KISS kelajak talabini aniq bilganingizda buzilishi mumkin: masalan, KMM orqali ikkinchi platformani qo'llab-quvvatlash yoki keyingi chorakda yangi arxitekturaga migratsiya. Shart: kelajak talabi hujjatlashtirilgan bo'lishi kerak, faraziy taxmin emas.
Ob'ektiv metrikalardan foydalaning: siklomatik murakkablik (metod uchun 10 gacha), metod uchun qatorlar soni (20 gacha), joylashish darajasi (3 gacha). Android uchun Detekt plagini, iOS uchun SwiftLint. Sub'ektiv metrika: yangi dasturchi kodni bir daqiqa ichida tushunishi kerak.
Ha, KISS va SOLID mos. SOLID to'g'ri arxitektura haqida, KISS — minimal murakkablik haqida. KISS ning buzilishi SOLID ni haddan tashqari qo'llashdan kelib chiqadi: uchtasi yetarli bo'lgan joyda o'nlab sinflar yaratish. Oltin qoida: SOLID oqilona chegaragacha, KISS har qadamda filtr sifatida.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.