JavaRush /Блоги Java /Random-TG /Қисми 7. Муқаддима ба намунаи MVC (Model-View-Controller)...

Қисми 7. Муқаддима ба намунаи MVC (Model-View-Controller).

Дар гурӯҳ нашр шудааст
Ин мавод як қисми силсилаи «Муқаддима ба рушди корхона» мебошад. Мақолаҳои қаблӣ: Қисми 7. Муқаддима ба намунаи MVC (Model-View-Controller) - 1Дар ин мавод мо шуморо бо чунин чизе ба монанди MVC шинос хоҳем кард. Биёед дар бораи чӣ будани MVC сӯҳбат кунем, ба таърихи офариниши он дахл кунем, ғояҳо ва мафҳумҳои асосии ба MVC хосро фаҳмем, қадам ба қадам дида бароем, ки чӣ гуна барномаро ба модулҳои Model, View, Controller тақсим кардан мумкин аст ва инчунин як барномаи хурди вебро дар Spring-Boot ва бо истифода аз Spring-MVC ҳамчун мисол, биёед бубинем, ки чӣ гуна маълумот аз codeи Java ба саҳифаҳои html интиқол дода мешавад. Барои фаҳмидани ин мавод, шумо бояд бо намунаҳои тарроҳӣ, махсусан Observer ва Facade шинос шавед. Бо дархостҳо ва посухҳои HTTP шинос шавед, асосҳои html-ро дарк кунед, бидонед, ки эзоҳҳо дар Java чӣ гунаанд. Пас нишинед, чой тайёр кунед, шириниҳо, хӯришҳо, хӯрокҳои асосӣ ва якумин омода кунед. Мо оғоз мекунем.

Таърихи MVC

Ғояҳои MVC аз ҷониби Тригве Реенскауг ҳангоми кор дар Xerox PARC дар охири солҳои 70-ум таҳия шуда буданд. Дар он рӯзҳо, кор бо компютер бидуни дараҷаи илмӣ ва омӯзиши доимии ҳуҷҷатҳои ҳаҷм ғайриимкон буд. Мушкилоте, ки Reenskaug якҷоя бо як гурӯҳи таҳиягарони хеле қавӣ ҳал кард, содда кардани ҳамкории корбари миёна бо компютер буд. Воситахоеро ба вучуд овардан лозим буд, ки аз як тараф нихоят содда ва фахмо бошанд, аз тарафи дигар барои идора кардани компютер ва замимахои мураккаб имкон медоданд. Reenskaug дар гурӯҳе кор кардааст, ки компютери сайёри "барои кӯдакони ҳама синну сол" - Dynabook ва инчунин забони SmallTalk таҳти роҳбарии Алан Кей таҳия кардааст. Он вақт ва дар он ҷо консепсияҳои интерфейси дӯстона гузошта шуданд. Кори Реенскауг бо дастаи худ ба рушди соҳаи IT таъсири калон расонд. Биёед як далели ҷолиберо пешниҳод кунем, ки мустақиман ба MVC алоқаманд нест, аммо аҳамияти ин пешрафтҳоро нишон медиҳад. Дар соли 2007, пас аз муаррифии iPhone-и Apple, Алан Кей гуфт: "Вақте ки Macintosh баромад, Newsweek пурсид, ки ман дар бораи он чӣ фикр мекунам. Гуфтам: ин аввалин компютери фардӣ аст, ки сазовори интиқод аст. Пас аз муаррифӣ Стив Ҷобс баромад ва пурсид: оё iPhone сазовори интиқод аст? Ва ман гуфтам, ки онро панҷ ба ҳашт дюйм созед ва шумо ҷаҳонро мағлуб хоҳед кард ». Пас аз се сол, 27 январи соли 2010, Apple iPad-и 9,7 дюймиро муаррифӣ кард. Яъне, Стив Ҷобс ба маслиҳати Алан Кей амал кард, ки қариб айнан ба маънои аслӣ буд. Лоиҳае, ки Реннскауг дар он кор кардааст, 10 сол давом кард. Ва аввалин нашрия дар бораи MVC аз созандагони он пас аз 10 соли дигар нашр шуд. Мартин Фаулер, муаллифи як қатор китобҳо ва мақолаҳо оид ба меъмории нармафзор, қайд мекунад, ки ӯ MVC-ро аз versionи кории SmallTalk омӯхтааст. Азбаски муддати тӯлонӣ дар бораи MVC аз сарчашмаи аввалия маълумот мавҷуд набуд, инчунин бо як қатор сабабҳои дигар, шумораи зиёди тафсирҳои гуногуни ин консепсия пайдо шуданд. Дар натиҷа, бисёриҳо MVC-ро нақша ё намунаи тарроҳӣ медонанд. Камтар, MVC намунаи таркибӣ ё омезиши якчанд намунаҳо номида мешавад, ки барои татбиқи барномаҳои мураккаб якҷоя кор мекунанд. Аммо дар асл, тавре ки қаблан гуфта шуд, MVC пеш аз ҳама маҷмӯи ғояҳо/принсипҳо/равишҳои меъморӣ мебошад, ки метавонанд бо роҳҳои гуногун бо истифода аз намунаҳои гуногун амалӣ карда шаванд... Минбаъд, мо кӯшиш мекунем, ки идеяҳои асосии дар консепсияи MVC ҷойгиршударо дида бароем.

MVC чист: ғояҳо ва принсипҳои асосӣ

  • VC маҷмӯи ғояҳо ва принсипҳои меъморӣ барои сохтани системаҳои иттилоотии мураккаб бо интерфейси корбар аст;
  • MVC ихтисоротест, ки маънои Model-View-Controller мебошад.
Радди масъулият: MVC намунаи тарроҳӣ нест. MVC маҳз маҷмӯи ғояҳо ва принсипҳои меъморӣ барои сохтани системаҳои мураккаб бо интерфейси корбар аст . Аммо барои роҳат, то ки ҳар дафъа такрор нашавад: "Маҷмӯи ғояҳои меъморӣ ...", мо MVC-ро намуна меномем. Биёед бо чизи оддӣ оғоз кунем. Дар паси калимаҳои Model-View-Controller чӣ пинҳон аст? Ҳангоми таҳияи системаҳо бо интерфейси корбар, мувофиқи намунаи MVC, шумо бояд системаро ба се ҷузъ тақсим кунед. Инҳоро дар навбати худ модулҳо ё ҷузъҳо номидан мумкин аст. Он чизе ки мехоҳед бигӯед, аммо ба се тақсим кунед. Ҳар як ҷузъ ҳадафи худро дорад. Модели. Ҷузъи аввал/модул модели ном дорад. Он тамоми мантиқи тиҷоратии барномаро дар бар мегирад. Намоиш. Қисми дуюми система манзара аст. Ин модул барои намоиш додани маълумот ба корбар масъул аст. Ҳар чизе, ки корбар мебинад, аз ҷониби намоиш тавлид мешавад. Назоратчӣ. Ҳалқаи сеюми ин занҷир контроллер мебошад. Он codeеро нигоҳ медорад, ки барои коркарди амалҳои корбар масъул аст (ҳар амали корбар дар система дар контроллер коркард мешавад). Модел қисми мустақилтарини система мебошад. Он қадар мустақил, ки он набояд дар бораи модулҳои View ва Controller чизе донад. Модели он қадар мустақил аст, ки таҳиягарони он дар бораи View ва Controller амалан чизе намедонанд. Мақсади асосии Намоиш ин пешниҳоди маълумот аз Модел дар формати барои истифодабарандагон мебошад. Маҳдудияти асосии Намоиш дар он аст, ки он набояд моделро ба ҳеҷ ваҷҳ тағир диҳад. Мақсади асосии контроллер коркарди амалҳои корбар аст. Маҳз тавассути Контроллер корбар ба модел тағйирот ворид мекунад. Аниқтараш, ба маълумоте, ки дар модел нигоҳ дошта мешавад. Боз диаграммаеро, ки дар лекция ба шумо нишон дода шуда буд, медихем: Қисми 7. Муқаддима ба намунаи MVC (Model-View-Controller) - 2Аз хамаи ин мо хулосаи комилан мантикй баровардан мумкин аст. Системаи мураккабро ба модулҳо тақсим кардан лозим аст. Биёед ба таври мухтасар қадамҳои ба даст овардани чунин ҷудоиро тавсиф кунем.

Қадами 1: Мантиқи тиҷорати барномаро аз интерфейси корбар ҷудо кунед

Идеяи асосии MVC аз он иборат аст, ки ҳама гуна замима бо интерфейси корбар метавонад ба тахмини аввал ба 2 модул тақсим карда шавад: модуле, ки барои татбиқи мантиқи тиҷоратии барнома масъул аст ва интерфейси корбар. Модули якум функсияҳои асосии барномаро амалӣ хоҳад кард. Ин модул асоси система хоҳад буд, ки дар он модели домени барнома амалӣ карда мешавад. Дар консепсияи MVC, ин модул ҳарфи M мо хоҳад буд, яъне. модел. Модули дуюм тамоми интерфейси корбарро, аз ҷумла намоиши маълумот ба корбар ва мантиқи ҳамкории корбарро бо барнома амалӣ хоҳад кард. Мақсади асосии ин ҷудокунӣ таъмини он аст, ки асосии система (Модели истилоҳоти MVC) мустақилона таҳия ва санҷида шавад. Меъмории барнома пас аз чунин тақсимот чунин хоҳад буд: Қисми 7. Муқаддима ба намунаи MVC (Model-View-Controller) - 3

Қадами 2. Бо истифода аз намунаи Observer, ба мустақorяти бештари модел ноил шавед ва инчунин ҳамоҳангсозии интерфейсҳои корбар

Дар ин ҷо мо 2 ҳадафро пайгирӣ мекунем:
  1. Ба мустакorяти боз хам бештари модел ноил шавед.
  2. Интерфейси корбарро ҳамоҳанг созед.
Мисоли зерин ба шумо кӯмак мекунад, ки фаҳмед, ки тавассути ҳамоҳангсозии интерфейсҳои корбар чӣ маъно дорад. Фарз мекунем, ки мо билети филмро онлайн мехарем ва шумораи ҷойҳои мавҷударо дар театр мебинем. Дар як вакт бо мо каси дигар билети кино харида метавонад. Агар ин кас пеш аз мо чипта харад, мо мехоҳем дид, ки шумораи ҷойҳои мавҷуда барои сессияи мо кам шудааст. Акнун биёед дар бораи он фикр кунем, ки ин корро дар дохor барнома чӣ гуна амалӣ кардан мумкин аст. Фарз мекунем, ки мо як ядрои система (модели мо) ва интерфейс (саҳифаи веб, ки мо дар он харид мекунем) дорем. Дар сайт, 2 корбар ҳамзамон курсиро интихоб мекунанд. Аввалин корбар чипта харид. Корбари дуюм бояд ин маълумотро дар саҳифа нишон диҳад. Ин чӣ гуна бояд рӯй диҳад? Агар мо интерфейсро аз ядрои система навсозӣ кунем, ядрои мо, модели мо аз интерфейс вобаста хоҳад буд. Ҳангоми таҳия ва озмоиши модел, шумо бояд роҳҳои гуногуни навсозии интерфейсро дар хотир доред. Барои ноил шудан ба ин, шумо бояд намунаи Observer -ро татбиқ кунед. Бо ёрии он, модел дар бораи тағирот ба ҳамаи муштариён огоҳинома мефиристад. Интерфейс, ки чунин муштарӣ аст, огоҳӣ ва навсозӣ мегирад. Намунаи Observer ба модел имкон медиҳад, ки аз як тараф, ба интерфейс (намоиш ва контроллер) дар бораи тағирот дар он маълумот диҳад ва аз тарафи дигар, воқеан дар бораи онҳо чизе "надонад" ва ба ин васила мустақил боқӣ монад. Аз тарафи дигар, ин имкон медиҳад, ки интерфейсҳои корбар ҳамоҳанг карда шаванд.

Қадами 3. Тақсим кардани интерфейс ба View ва Controller

Мо тақсим кардани барномаро ба модулҳо идома медиҳем, аммо дар сатҳи поёнтари иерархия. Дар ин қадам, интерфейси корбар (ки дар қадами 1 ба модули алоҳида ҷудо карда шудааст) ба намоиш ва контроллер тақсим карда мешавад. Байни манзара ва контроллер хати қатъӣ кашидан душвор аст. Агар гӯем, ки намуди зоҳирӣ он чизест, ки корбар мебинад ва контроллер механизмест, ки тавассути он корбар метавонад бо система муошират кунад, ихтилоф вуҷуд дорад. Назоратҳо, ба монанди тугмаҳо дар саҳифаи веб ё клавиатураи виртуалӣ дар экрани телефон, аслан қисми контроллер мебошанд. Аммо онҳо ба корбар мисли ҳама қисмҳои манзара намоёнанд. Дар ин ҷо сухан бештар дар бораи тақсимоти функсионалӣ меравад. Вазифаи асосии интерфейси корбар таъмини ҳамкории корбар бо система мебошад. Ин маънои онро дорад, ки интерфейс танҳо 2 вазифа дорад:
  • нишон додан ва ба таври қулай нишон додани маълумот дар бораи система ба корбар;
  • ворид кардани маълумот ва фармонҳои корбар ба система (интиқоли онҳо ба система);
Ин вазифаҳо муайян мекунанд, ки интерфейс чӣ гуна бояд ба модулҳо тақсим карда шавад. Дар натиҷа, меъмории система чунин менамояд: Қисми 7. Муқаддима ба намунаи MVC (Model-View-Controller) - 4Ҳамин тавр, мо як барномаи се модул дорем, ки Модел, Намоиш ва Назоратчӣ ном доранд. Барои ҷамъбаст:
  1. Мувофиқи принсипҳои MVC, системаро ба модулҳо тақсим кардан лозим аст.
  2. Модули муҳимтарин ва мустақил бояд модел бошад.
  3. Модели асосии система мебошад. Ба шумо қобorяти таҳия ва санҷидани он новобаста аз интерфейс лозим аст.
  4. Барои ин, дар қадами аввалини сегрегатсияи система, шумо бояд онро ба модел ва интерфейс тақсим кунед.
  5. Баъдан, бо истифода аз намунаи Observer, мо моделро дар мустақorяти худ мустаҳкам мекунем ва ҳамоҳангсозии интерфейсҳои корбарро ба даст меорем.
  6. Қадами сеюм ин тақсим кардани интерфейс ба контроллер ва намоиш аст.
  7. Ҳама чизест, ки барои ворид кардани маълумот аз корбар ба система ба контроллер лозим аст.
  8. Ҳама чизе, ки маълумотро аз система ба корбар мебарорад, дар назар аст.
Боз як чизи муҳиме боқӣ мемонад ва шумо метавонед Howао бинӯшед.

Каме дар бораи муносибати байни View ва Controller ва Model

Вақте ки корбар маълумотро тавассути контроллер ворид мекунад, вай ба ин васила ба модел тағйирот ворид мекунад. Ҳадди ақал корбар ба маълумоти модел тағйирот ворид мекунад. Вақте ки корбар иттилоотро тавассути унсурҳои интерфейс (тавассути View) мегирад, корбар дар бораи маълумоти модел маълумот мегирад. Ин чӣ гуна рӯй медиҳад? Намоиш ва контроллер бо модел чӣ гуна ҳамкорӣ мекунанд? Дар ниҳоят, чунин шуда наметавонад, ки синфҳои View мустақиман усулҳои синфҳои Моделро барои хондан/навиштани маълумот истифода баранд, вагарна дар бораи мустақorяти Модел ҳеҷ гуна саволе вуҷуд надорад. Модели маҷмӯи зич бо ҳам алоқаманди синфҳоро ифода мекунад, ки ба таври хуб на Намоиш ва на контроллер ба онҳо дастрасӣ надоранд. Барои пайваст кардани Модел бо Намоиш ва Контроллер, намунаи тарҳрезии фасадро амалӣ кардан лозим аст. Фасади модел як қабати байни Модел ва интерфейс хоҳад буд, ки тавассути он View маълумотро дар формати мувофиқ қабул мекунад ва Контроллер бо даъват кардани усулҳои зарурии фасад маълумотро тағир медиҳад. Схематикӣ, дар ниҳоят, ҳама чиз чунин хоҳад буд: Қисми 7. Муқаддима ба намунаи MVC (Model-View-Controller) - 6

MVC: чӣ фоида дорад?

Ҳадафи асосии риояи принсипҳои MVC ин ҷудо кардани татбиқи мантиқи тиҷории барнома (модели) аз визуализатсияи он (намоиш) мебошад. Ин ҷудокунӣ истифодаи такрории codeро зиёд мекунад. Манфиатҳои истифодаи MVC дар ҳолатҳое аёнанд, ки корбар бояд як маълумотро дар шаклҳои гуногун пешниҳод кунад. Масалан, дар шакли ҷадвал, график ё диаграмма (бо истифода аз намудҳои гуногун). Ҳамзамон, бе таъсир расонидан ба татбиқи намоишҳо, шумо метавонед аксуламалҳоро ба амалҳои корбар тағир диҳед (ангуштзании тугма, ворид кардани маълумот). Агар шумо принсипҳои MVC-ро риоя кунед, шумо метавонед навиштани барномаҳоро содда кунед, хониши codeро зиёд кунед ва васеъ ва нигоҳдории системаро дар оянда осонтар кунед. Дар маводи ниҳоии силсилаи "Муқаддима ба рушди корхона", мо татбиқи MVC-ро бо истифода аз Spring-MVC ҳамчун намуна дида мебароем. Қисми 8. Навиштани аризаи хурд дар spring-boot
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION