Nima uchun ORM sizning eng yaxshi garovingiz bo'lmasligi kerak

Men dasturlashni boshlaganimda, bir necha yil oldin, ORM dasturiy loyihalarning hayotiy qoniga o'xshardi. Atrof-muhit kod bazasi va ORM qatlami o'rtasida mustahkam bog'lanishni ta'kidladi. Aytish mumkinki, men ORMsiz loyihalar haqida o'ylamaslikka o'rgandim.

Ammo tajriba va aniq loyihalar haqida chuqurroq bilimga ega bo'lib, ko'pgina yaxshilanishlar oxir-oqibat oqim ORM doirasiga kiradigan nuqtaga tushayotganini angladim. Men o'zimdan so'radim: agar ushbu loyihada ORM bo'lmasa nima bo'ladi?

Men ORM kiritgan muammolar haqida o'ylay boshladim:

  • Agar siz haqiqatan ham qo'shimcha tezlikni talab qilsangiz ham, kodingizni optimallashtira olmaysiz; ORM kodi o'z mamlakatida yashaydi.
  • Nima bo'layotganini ko'rish uchun kamida.
  • Hujjatlar odatda juda katta va qismlarga bo'lingan bo'lib, ular xususiyatlarini izlashni qiyinlashtiradi.

Bular kichik muammolar kabi ko'rinishi mumkin, ammo ular samaradorlikka sezilarli darajada putur etkazadi. Bulardan tashqari, men ORM ekotizimining asosiy muammolar va cheklovlar markasi bilan asosiy tarmoqni rivojlantirishdan ajratilganligini angladim. ORMs odatda keraksiz murakkablikni keltirib chiqaradi va ma'lumotlar bazasi bilan o'zaro ishlashda "ochiq mavhumlik" ni ta'minlaydi. Ular ba'zan tik o'rganish chizig'iga ega va ishlab chiquvchilar ularga "qora quti" kabi munosabatda bo'lishga moyil.

Men ishlab chiquvchilar ORM muammosini hal qilish uchun turli xil yondashishlarini ko'rdim. Ba'zilar loyihaning murakkabligiga qarab ko'pincha Herkulean vazifasini bajaradigan ORM ramkalarini butunlay yo'q qilishadi. Ba'zilar o'z loyihalarida ORM-ni qabul qilishadi va kodni moslashadi; ular ishlash bo'yicha murosaga tayyor va qo'shilgan murakkablik haqida qayg'urmaydilar. Ularning aksariyati ORM-dan foydalanishda davom etadigan oltin yo'lni tanlaydilar, ammo yangi yoki murakkab so'rovlar chiqarib tashlanadi. Ulardan ba'zilari aslida loyihaga xos bo'lgan va ehtiyojga qarab o'z xaritalash qatlamini yaratadilar.

Hozirga qadar men Hibernate (Java) va Mongoose (MongoDB uchun tugun ichida ORM ramkasi) bilan ishladim. Mongoose-ni ORM sifatida ishlatib bo'lgan "Node" loyihasiga kelganimda, deyarli butun loyihani qayta tiklash vazifasini oldim. Avvaliga ORM ramkasini butunlay yo'q qilish haqida o'yladim. Ammo mening hamkasblarim meni qo'llab-quvvatlayotgan raqamlarsiz qoniqishmaydi. Shuning uchun men so'rov vaqtini Mongoose bilan va bo'lmasdan taqqosladim. Mana natijalar.

Ular meni kutilmaganda olib ketishdi. Mongoose-dan foydalanmayotgan bo'lsam-da, lekin bu darajada emas. Ushbu ma'lumotlarning qo'lida tanlov aniq edi: ORM mavjud emas. Bir necha oy o'tgach, bir hamkasbim Postgres ma'lumotlar bazasiga kirish uchun Sequelize yoki Pg-dan foydalanish kerakmi, deb so'radi. Sequelize ORM ekanligini bilib, men o'z ovozimni Pg-ga berdim, lekin undan ikkalasini solishtirishini so'radim. Men ORM nafratining asosli yoki yo'qligini tekshirishni xohladim va raqamlar qaytib kelganida, bu haqiqatan ham to'liq asosli ekanligi ayon bo'ldi.

U qaysi kutubxonani ilgari surganini taxmin qiling.

Bu erda yodda tutish kerak bo'lgan narsa, biz ORMlarni tashlaganimizda, xoh Mongoose yoki Sequelize, biz nimadan voz kechayotganini bilardik. Xususan, sxemalarni tekshirish, oldindan tuzilgan usullar, abstraktsiyalar va boshqalar ORM tizimidan foydalanish huquqini berdi. Jiddiy ma'lumotlarning MBga kirishiga olib keladigan biror narsa (ORM-lar ishlatilmaganda) tekshirilmaganligi katta tashvish tug'dirdi. Buning uchun biz Djoydan foydalandik, bu esa vazifamizni bekamu ko'st saqlab, vazifamizni osonlashtirdi. Boshqa qismlar uchun biz bir necha qator qo'shimcha kodni yozishimiz kerak edi, ammo bunga arziydi. Har bir so'rovda o'nlab millisekundlarni (ba'zan hatto soniyalarni) yo'qotishdan afzalroq.

Men ORMlarni urishga harakat qilmayman va ular yangi boshlanuvchilar va kichik miqyosdagi loyihalar uchun juda yaxshi. Ammo sizning loyihangiz ko'plab so'rovlar va hujjatlarni qamrab olganda, ORM-lar muammoga aylanishi mumkin. Ularni Vetnam urushi deb o'ylab ko'ring, qachon chiqib ketish va qachon ishlashni hal qilishingiz kerak, aks holda katta zarar muqarrar.