Asosiy kontentga o‘tish
Innovialabs

DRY, KISS va YAGNI: dasturlash tamoyillari oddiy tilda

Asoslar3 daq

Qisqacha

DRY — bitta bilim bitta joyda, KISS — eng oddiy ishlaydigan yechim, YAGNI — hozircha kerak bo‘lmagan narsani yozmaslik; ularni alohida emas, birga qo‘llash kerak.

Uch tamoyil qisqacha

  • DRY (Don’t Repeat Yourself) — tizim haqidagi har bir bilim bitta joyda yashashi kerak. Gap bir xil qatorlar haqida emas, qoidalar va qarorlar haqida.
  • KISS (Keep It Simple, Stupid) — ishlaydigan eng oddiy yechimni tanlang. Oddiy kodni o‘qish, testlash va o‘zgartirish osonroq.
  • YAGNI (You Aren’t Gonna Need It) — funksionallikni haqiqatan kerak bo‘lmaguncha «kelajak uchun» yozmang.

Uchalasi ham bitta dushman — ortiqcha murakkablik bilan kurashadi, lekin turli tomondan.

DRY misolda

«Ma’lum summadan yuqori buyurtmaga bepul yetkazib berish» qoidasi savatda, mijozga xatda va admin panelda uchraydi. Agar summa uch joyda yozilgan bo‘lsa, shart o‘zgarganda bir joy albatta unutiladi.

// qoida uchun bitta joy
export const FREE_SHIPPING_THRESHOLD = 500_000;

export function hasFreeShipping(total) {
  return total >= FREE_SHIPPING_THRESHOLD;
}

Endi savat, xat va admin panel bitta funksiyani chaqiradi.

DRY qachon zarar keltiradi

Xavf — faqat tashqi ko‘rinishi o‘xshash kodni birlashtirish. Ikki validatsiya funksiyasi — ro‘yxatdan o‘tish va buyurtma rasmiylashtirish uchun — bugun bir xil maydonlarni tekshiradi. Siz umumiy validateUser() yaratasiz. Bir oydan keyin buyurtma uchun manzil kerak bo‘ladi, ro‘yxatdan o‘tish uchun esa yo‘q. Flag paydo bo‘ladi. Keyin ikkinchisi. Funksiya shartlar bilan to‘lib boradi va har bir tahrir ikkala ssenariyni buzish xavfini tug‘diradi.

Bu noto‘g‘ri abstraksiya deb ataladi. Belgilari:

  • umumiy funksiyada boolean parametrlar soni o‘sib boradi;
  • ichida kim chaqirayotganiga qarab ko‘plab if bor;
  • bitta joy uchun o‘zgartirish qolgan barcha joylarni tekshirishni talab qiladi.

Amaliy qoida: uchinchi o‘xshash holatni ko‘rmaguningizcha va bu haqiqatan bitta bilim ekanini tushunmaguningizcha takrorlanishga yo‘l qo‘ying. Agar abstraksiya allaqachon noto‘g‘ri bo‘lsa, nusxalarni qaytarib, kodni qayta ajratishdan qo‘rqmang.

KISS amalda

  • Agar jamoa tezroq o‘qisa, oddiy sikl beshta hiyla-nayrangli operatsiya zanjiridan tushunarliroq.
  • Alohida servis, navbat yoki keshni «yirik kompaniyalar shunday qiladi» deb emas, aniq muammo bo‘lganda qo‘shing.
  • Tushunarli o‘zgaruvchi nomi ko‘pincha izohning o‘rnini bosadi.

Soddalik — primitivlik emas. Oddiy yechim ko‘proq o‘ylashni talab qilishi mumkin, lekin kamroq harakatlanuvchi qismlar qoldiradi.

YAGNI amalda

Odatiy buzilishlar:

  • birorta ham plagini yo‘q ilova uchun universal plaginlar tizimi;
  • bitta ishlatilayotganda bir nechta ma’lumotlar bazasini qo‘llab-quvvatlash;
  • hech kim hech qachon o‘zgartirmagan parametrlar uchun sozlamalar.

Har bir shunday «zaxira» hozir vaqt oladi va keyin xalaqit beradi: uni qo‘llab-quvvatlash, testlash va aylanib o‘tish kerak. Ehtiyoj paydo bo‘lganda siz real talablarni bilasiz va aniqroq qilasiz.

YAGNI yaxshi tuzilmani bekor qilmaydi: toza, testlar bilan qoplangan kodni vaqti kelganda kengaytirish oson.

Tamoyillar bir-birini qanday muvozanatlaydi

VaziyatTamoyil nima maslahat beradi
Bitta biznes qoidasi uch joydaDRY: bitta joyga chiqarish
Umumiy funksiya flaglar bilan to‘lganKISS: qaytadan oddiylarga ajratish
«O‘sish uchun» abstraksiya qilgisi keladiYAGNI: real ehtiyojni kutish
Oddiy yechim kodni takrorlaydiBaholash: bu bitta bilimmi

DRY murakkab abstraksiyaga undasa, KISS va YAGNI uni ushlab turadi. KISS bitta qoidani nusxalashga aylansa, DRY nomuvofiqlik narxini eslatadi.

Ko‘p beriladigan savollar

Yo‘q. DRY matnga emas, bilimga tegishli. Turli sabablarga ko‘ra o‘zgaradigan ikki bir xil fragmentni alohida qoldirgan ma’qul.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.