Convention over configuration — dasturiy framework foydalanuvchidan har bir odatiy qarorni alohida sozlashni talab qilmay, oldindan belgilangan nomlash va tuzilish qoidalarini qo‘llaydigan yondashuvdir. Dasturchi shu konvensiyalarga amal qilsa, framework kerakli bog‘lanishlarni avtomatik aniqlaydi. Faqat standart xatti-harakatdan chetga chiqilganda qo‘shimcha konfiguratsiya yoziladi.
Yondashuvning mazmuni
Konfiguratsiyaga asoslangan tizimda klass, jadval, fayl va URL o‘rtasidagi har bir bog‘lanish XML, YAML, JSON yoki kod orqali ko‘rsatilishi mumkin. Convention over configuration esa keng tarqalgan holat uchun oqilona standart qiymat tanlaydi. Masalan, Article nomli modelning articles jadvaliga bog‘lanishi konvensiya bo‘lishi mumkin. Jadval boshqa nomda bo‘lsa, dasturchi buni alohida sozlaydi.
Shu tamoyil papka tuzilishida ham ko‘rinadi. Framework controller, template, model va migratsiyalarni ma’lum kataloglarda kutadi. Fayl to‘g‘ri joyda va to‘g‘ri nomda bo‘lsa, uni ro‘yxatdan o‘tkazuvchi ortiqcha kod kerak bo‘lmaydi.
Ish jarayoniga ta’siri
Konvensiya takroriy qarorlar sonini kamaytiradi. Yangi loyiha yoki modul tanish tuzilishga ega bo‘lgani uchun frameworkni biladigan dasturchi kodni tezroq topadi. Generatorlar ham konvensiyaga asoslanib controller, test yoki migratsiya fayllarini mos joyda yaratadi.
Asosiy afzalliklar quyidagilardir:
- boshlang‘ich konfiguratsiya hajmi kamayadi;
- jamoa loyihalari o‘xshash tuzilishga ega bo‘ladi;
- standart holat uchun kod qisqaradi;
- dokumentatsiya umumiy nomlashga tayana oladi.
Bu natija “konfiguratsiya umuman yo‘q” degani emas. Ma’lumotlar bazasi ulanishi, tashqi xizmat kaliti yoki deploy muhiti kabi qiymatlar baribir sozlanadi.
Frameworklardagi ko‘rinishi
Ruby on Rails ushbu atamani ommalashtirgan frameworklardan biridir. Laravel, Django va boshqa ko‘plab frameworklarda ham konvensiya elementlari mavjud. Django ilovaning models.py, views.py va migrations katalogini taniydi; Laravel esa Eloquent model nomidan standart jadval nomini hosil qiladi. Har bir ekotizimning qoidalari turlicha bo‘lgani uchun konvensiya framework hujjati bilan aniqlanadi.
Cheklovlari
Yashirin avtomatika boshlovchi uchun ba’zan tushunarsiz bo‘lishi mumkin. Biror narsa nomlash qoidasi sabab ishlasa, aniq bog‘lanish kodda ko‘rinmaydi. Konvensiyadan tashqari eski baza yoki noodatiy domen modeli ko‘p override talab qilishi mumkin. Bunday vaziyatda dastlab kamaygan konfiguratsiya murakkab moslashtirishga aylanadi.
Konvensiya shuningdek frameworkga bog‘liqlikni kuchaytiradi. Jamoa qoidalarni bilishi va ularni izchil qo‘llashi kerak. Yaxshi konvensiya keng tarqalgan holatni soddalashtiradi, lekin aniq konfiguratsiya uchun ochiq mexanizmni ham saqlaydi.
Konvensiyaning aniqlanishi
Konvensiya yashirin taxmin bo‘lib qolmasligi uchun u framework hujjati, generator va xato xabarlari orqali aniq ifodalanadi. Model nomidan jadval nomi hosil qilishda ko‘plik, katta-kichik harf va namespace qoidalari muhim. Turli tillarda oddiy pluralization ham bir xil ishlamaydi; shuning uchun override mexanizmi zarur. Jamoa framework ustiga o‘z ichki konvensiyasini qo‘shsa, linter yoki loyiha shabloni uni tekshirishi mumkin. Aks holda yangi xodim qoidani faqat mavjud kodni taxmin qilib o‘rganadi. Konvensiyaning qiymati uning “sehrli” bo‘lishida emas, takroriy qarorni bir xil va oldindan ma’lum shaklda hal qilishidadir.
Diagnostika
Konvensiya buzilganda yaxshi framework kutilgan nom yoki joyni xato xabarida ko‘rsatadi. Aks holda avtomatik bog‘lanish shunchaki ishlamay qolib, sababni topish qiyinlashadi. Debug vositasi framework qaysi fayl, klass yoki jadvalni izlaganini ochib bersa, yashirin qoida kuzatiladigan mexanizmga aylanadi. Testlar standart nomlashdan chetga chiqilgan konfiguratsiyani ham tekshiradi.
Bog‘liq tushunchalar
framework, configuration, naming convention, Ruby on Rails, Django, Laravel, scaffolding