MVC: Nuanslarni tushunish
MVC ning mohiyati
MVC (Model-View-Controller) grafik foydalanuvchi interfeysini yaratish uchun tushunchadir. U 1978 yilda norvegiyalik kompyuter olimi Trygve Reenskaug tomonidan kiritilgan. O'sha paytda dasturchilar kompyuter foydalanuvchisi katta hajmdagi ma'lumotlar bilan qanday ishlashi mumkinligi haqidagi savolga duch kelishdi. Reenskaug printsipi bu muammoni odamlarga kompyuter tizimlarini intuitiv tarzda boshqarishga imkon berish orqali hal qildi. MVC ning asosiy g'oyasi shundaki, har bir kod qismi o'z maqsadiga ega. Bir bo'lim dastur ma'lumotlarini o'z ichiga oladi, ikkinchisi uni foydalanuvchiga taqdim etish uchun javobgardir, uchinchisi dasturning ishlashini nazorat qiladi.
Keling, ularni ko'rib chiqaylik.
Model. Bu butun ramka uchun qo'llaniladigan asosiy ma'lumotlar ombori. Model ma'lumotlarni ko'rish, yozib olish va tanlash imkonini beradi. U ko'rinish va boshqaruvchi o'rtasidagi ko'prik sifatida ham tanilgan. Shuni ta'kidlash kerakki, Modelda ma'lumot boshqa bo'limlarga yuborilgandan keyin nima sodir bo'lishi haqida ma'lumot mavjud emas. Ushbu qismning asosiy mas'uliyati ombordagi ma'lumotlarni qayta ishlash, ularni olish va keyingi uzatish uchun tayyorlashdir. Ko'pincha MVC ning eng murakkab qismi Modeldir. U qo'riqchiga o'xshaydi, har doim ma'lumotlarni saqlash joyining yonida turadi, keraksiz savollarni bermasdan barcha vazifalarni qabul qiladi. Model butun tuzilishning yuqori qismidir, chunki usiz ko'rinish va boshqaruvchi o'rtasida aloqa o'rnatish mumkin bo'lmaydi.
View. Modeldan so'ralgan ma'lumotlar bizga ushbu komponent tufayli aniq ko'rinadi. Veb-ilovalar uchun View HTML kodini yaratadi va ko'rsatadi. Ushbu bo'lim shuningdek, foydalanuvchi harakatlarini to'xtatadi va ularni boshqaruvchiga o'tkazadi. View chiqishining odatiy misoli tugmadir. Uni bosgandan so'ng, Controllerda harakat boshlanadi. Shuni ta'kidlash kerakki, ma'lumot to'g'ridan-to'g'ri Ko'rinishdan Controllerga o'tkazilmaydi: ular orasidagi aloqa Model orqali amalga oshiriladi.
Controller. Uning vazifasi kiritilgan ma'lumotlarni qayta ishlash va Modelni yangilashdir. Ushbu bo'limda foydalanuvchi bilan to'g'ridan-to'g'ri muloqot sodir bo'ladi. Nazoratchi ma'lumotlarni to'playdi va uni Modelga o'tkazadi, keyin esa saqlashni tashkil qiladi. Asosan, ma'lumot to'plashdan boshqa mantiqqa ega emas. Controller faqat bitta Model va bitta ko'rinish bilan bog'langanligini tushunish muhimdir. Boshqa yo'l yo'q. Bu bitta kirish va bitta chiqish almashinuviga ega bo'lgan bir tomonlama axborot oqimi tizimi.
U faqat foydalanuvchi View bilan o'zaro aloqada bo'lgandan keyingina bajarish uchun vazifani oladi. Va boshqaruvchi shlyuz emas. Ishlab chiquvchilar ko'pincha qiladigan xatolardan biri bu View-ga tegishli vazifalar va funktsiyalarni belgilashdir.
MVC misoli
MVC kontseptsiyasini tushunishning eng yaxshi usuli bu haqiqiy hayot misolidan foydalanishdir. Keling, tez ovqatlanish restoranini ko'rib chiqaylik. Bu erda mijoz (foydalanuvchi) kassirga yaqinlashadi (bu ham View, ham Controller), menyuni ko'rib chiqadi va ovqatni tanlaydi. Keyin xodim buyurtmani har qanday muammo uchun tekshiradi, to'lovni qayta ishlaydi va zarur ma'lumotlarni oshpazga (Model) yuboradi. Oshpaz taom tayyorlaydi, lekin mijozning tashqi ko‘rinishi va pul to‘lagan-qilmaganligini bilmaydi. Model tugagach, natijani tayyor taomni iste'molchiga yetkazib beruvchi restoran xodimi Viewga yuboradi.
Ilovalarda bo'limlar boshqacha ko'rinadi:
Taqdimot - interfeys.
Tekshirish moslamasi - foydalanuvchi harakatlarini qayta ishlaydigan qurilma (tugmalarni bosish, maydonlarni to'ldirish, havoladan keyin).
Model barcha operatsiyalarni (hisob-kitoblarni bajarish, ma'lumotlar omboridan ma'lumot olish) amalga oshiradigan boshqaruvchi tomonidan boshlangan jarayondir.
MVC ni amalga oshirish turli vazifalarda farq qilishi mumkin. Shunday qilib, ilovada Modelning o'zi Viewga biror narsa o'zgarganligi haqida xabar berishi mumkin va veb-ishlab chiqishda ular Controller orqali o'zaro ta'sir qiladi. Ushbu naqsh ilovaning mantiqiy qismlarini va ularning individual ishini ajratish uchun kerak. Boshqacha qilib aytganda, siz dasturning qolgan qismiga ta'sir qilmasdan xohlaganingizcha o'zgartirishingiz mumkin bo'lgan alohida kod bloklarini yozasiz.
Shunday qilib, ma'lumotni ko'rsatish usulini o'zgartirmasdan, uni qayta ishlash usulini qayta yozishingiz mumkin. Bu jarayon bir vaqtning o'zida bir nechta dasturchilarga samarali hamkorlik qilish imkonini beradi, chunki ularning har biri o'z yo'nalishi bo'yicha ishlaydi. Ishlab chiquvchi boshqa birovning kodiga kirishi shart emas va uning harakatlari dasturning qolgan qismiga ta'sir qilmaydi.
MVC-dan bosqichma-bosqich foydalanish
Yuqorida aytilganlarning barchasi mantiqiy xulosaga olib keladi: murakkab tizimlarni modullarga bo'lish kerak. Quyida ushbu buzilishga erishish uchun qadamlarning qisqacha ko'rinishi keltirilgan.
1-qadam: Ilovaning biznes mantiqini foydalanuvchi interfeysidan ajrating
Foydalanuvchi interfeysiga ega bo'lgan barcha ilovalarni ikkita modulga bo'lish mumkin. Birinchisi, dasturning biznes mantig'ining samarali ishlashini ta'minlash uchun javobgar bo'ladi. Ikkinchisi, shunga ko'ra, interfeysning o'zi uchun. Aslida, bu MVC ning asosiy g'oyasi. Bunday ajratishning asosiy maqsadi tizimning yadrosini (Model) mustaqil ravishda ishlab chiqish va sinovdan o'tkazish imkonini berishdir. Birinchi modul dasturning asosiy funksiyalarini amalga oshiradi. Bu tizimning asosiy qismidir. Bu MVC kontseptsiyasidagi bir xil M harfi. Ikkinchi modul butun foydalanuvchi interfeysini, shu jumladan foydalanuvchiga ma'lumotlarni ko'rsatish tartibi va turini va uning ilova bilan o'zaro aloqasini amalga oshiradi.
2-qadam: Observer naqshidan foydalanib, model mustaqilligini va UI sinxronizatsiyasini oshiring
Ushbu bosqichda bir vaqtning o'zida ikkita maqsadga erishiladi:
modelning mustaqilligini mustahkamlash;
foydalanuvchi interfeysi sinxronizatsiyasi.
UI sinxronizatsiyasi nimani anglatishini tushunish uchun quyidagi misol foydali bo'lishi mumkin. Onlayn ilova yordamida kontsertga chiptalarni sotib olasiz va zalda qancha o'rindiq borligini ko'rasiz. Siz bilan bir vaqtda boshqa birov band qilgan boʻlishi mumkin. Agar u birinchi navbatda xaridni amalga oshirsa, siz egallagan o'rindiqlarni ko'rsatadigan ekran yangilanishini ko'rishingiz kerak.
Keling, dasturiy ta'minotda bunga qanday erishish mumkinligini ko'rib chiqaylik. Faraz qilaylik, bizda asosiy tizim (Model) va interfeys (xaridlar amalga oshiriladigan veb-sahifa) mavjud. Ikki foydalanuvchi bir vaqtning o'zida saytdagi joylarni tanlaydi. Birinchisi chipta sotib oladi, bu ma'lumot ikkinchisining sahifasida ko'rsatilishi kerak. Bunga qanday erishish mumkin?
Agar biz interfeysni tizimning yadrosidan yangilasak, Model interfeysga bog'liq bo'ladi. Bu qo'shimcha, keraksiz qadamlarni qo'shadi. Modelni ishlab chiqish va sinovdan o'tkazishda interfeysni yangilashning turli usullarini yodda tutishingiz kerak bo'ladi. Shablonni yaratishning eng oson yo'li - Observer. U barcha foydalanuvchilarni o'zgarishlar haqida xabardor qilish uchun ishlatiladi. Bunday abonent sifatida interfeys xabardor qilinadi va avtomatik ravishda yangilanadi. Model Observer naqshidan foydalanib, Model interfeysga (Ko'rish va Controller) o'zgarishlar sodir bo'lganligi haqida xabar beradi. Shu bilan birga, u bu jarayondan mustaqil bo'lib qoladi, chunki u sodir bo'layotgan harakatlardan xabardor emas.
3-qadam: Interfeysni View va Controllerga ajratish
Bu, shuningdek, dasturning o'ziga xos bo'linishi, faqat markazlashtirilgan. Bu erda 1-bosqichda ajratilgan bir xil foydalanuvchi interfeysi Ko'rinish va Controllerga bo'lingan. Ushbu ikki komponent o'rtasida qat'iy chiziq chizish qiyin. Ko'rinishni foydalanuvchi uchun ma'lumotlarning vizualizatsiyasi, Controller esa foydalanuvchining tizim bilan o'zaro aloqasi mexanizmi sifatida tushunadigan bo'lsak, ba'zi nomuvofiqliklar paydo bo'lishi mumkin. Ba'zi boshqaruv elementlari bu rasmga mos kelmaydi. Aytaylik, veb-sahifadagi tugma yoki mobil telefon ekranidagi virtual klaviatura. Aslini olganda, ularning ikkalasi ham Controllerning bir qismidir, lekin ayni paytda ular Ko'rinishdir, chunki foydalanuvchi ularni ko'radi. Shuning uchun, bu holda funktsional ajratishni amalga oshirish kerak. Interfeys foydalanuvchiga tizim bilan o'zaro aloqada bo'lish imkonini beruvchi asosiy vazifaga ega, ya'ni u faqat ikkita funktsiyaga ega:
tizim ma'lumotlarini qulay ko'rsatish;
foydalanuvchi ma'lumotlari va buyruqlarini dasturga kiritish (ularni tizimga o'tkazish).
Bu funktsiyalar bir-biriga bog'liq emas, lekin ular interfeysni aqlli tarzda qanday ajratish kerakligini aniqlaydi. Shunday qilib, bizda Model, View va Controller deb nomlangan uchta moduldan iborat dastur mavjud.
Muqobil naqshlar
MVC dan tashqari, ushbu qisqartmaning boshqa o'zgarishlari ham mavjud bo'lib, ularning har biri komponentlarning spetsifikatsiyasi va mas'uliyati nuqtai nazaridan bazadan bir oz farq qiladigan naqshni ifodalaydi. Masalan, MVVM (Model-View-Viewmodel so'zining qisqartmasi) eng zamonaviy ishlab chiqish platformalariga yo'naltirilgan. Bu Model, View va ViewModel degan ma'noni anglatadi. Controller o'rniga Viewmodel ishlatiladi. Bu View-ga qo'shimchaning bir turi bo'lib, uni ma'lumotlarga shunday bog'laydiki, ishlab chiquvchilar foydalanuvchi buyruqlarini qayta ishlash va interfeysni yangilash uchun mantiqni yozishlari shart emas. Bog'lash ishlashi uchun modeldagi o'zgarishlarni foydalanuvchi interfeysiga avtomatik ravishda moslashtiruvchi biriktiruvchi kerak bo'ladi. Bu ramka, kutubxona yoki butun til bo'lishi mumkin.
Svelte dasturiy ta'minoti birlashtiruvchi havola sifatida harakat qilishi mumkin. Bu bepul va ochiq manbali front-end komponentli ramka yoki til. U avtomatik ravishda modelni bog'lash va ko'rsatishni amalga oshiradi. MVP (Model-View-Presenter) da Controller o'rniga Presenter mavjud. MVP va MVC o'rtasidagi asosiy farq shundaki, MVC-da yangilangan Modelning o'zi View-ga turli ma'lumotlarni ko'rsatishi kerakligini aytadi. Agar bu sodir bo'lmasa va dasturga Vakil ko'rinishidagi vositachi kerak bo'lsa, unda naqsh MVP deb nomlanishi kerak. U chiziqli tarzda joylashtirilgan bo'limlarga ega. Ikkala uchida Model va Ko'rinish, o'rtada esa Taqdimotchi mavjud. U ma'lumotni va foydalanuvchi buyruqlarini qayta ishlashning barcha mantiqiyligi, shuningdek interfeysni yangilash uchun javobgardir. Bunday holda, Vakillik passivdir. Bu faqat ma'lumotni ekranda ko'rsatish bilan shug'ullanadi. MVC da View chiqishni formatlash uchun javobgar bo'lishi mumkin, lekin MVP da buning uchun Taqdimotchi javobgardir.
Ushbu yondashuv shubhasiz afzalliklarga ega: u yoki bu kod nimani anglatishi haqida hech qachon savol tug'ilmaydi. Salbiy tomoni shundaki, Taqdimotchi tezda katta va murakkab tizimga aylanadi. Uni to'g'ri ishlashi uchun siz uni kichikroq modullarga bo'lishingiz va ba'zan hatto "qatlamlar" qo'shishingiz kerak. Avvaliga MVC tushunish qiyin jarayon kabi ko'rinadi. Biroq, ishlayotganingizda, nima uchun uni eng ko'p ishlab chiquvchilar afzal ko'rishi aniq bo'ladi, ayniqsa odatiy asosiy dizayn bilan solishtirganda.
Foydalanilgan manba:gb.ru