JavaRush /Java блогу /Random-KY /7-бөлүк. MVC үлгүсүнө киришүү (Model-View-Controller).
Professor Hans Noodles
Деңгээл

7-бөлүк. MVC үлгүсүнө киришүү (Model-View-Controller).

Группада жарыяланган
Бул материал "Ишкананы өнүктүрүүгө киришүү" сериясынын бир бөлүгү болуп саналат. Мурунку макалалар: 7-бөлүк. MVC үлгүсүнө киришүү (Model-View-Controller) - 1Бул материалда биз сизди MVC сыяктуу нерсе менен тааныштырабыз. Келгиле, MVC деген эмне экени жөнүндө сүйлөшөлү, анын жаралуу тарыхына токтололу, MVCге мүнөздүү болгон негизги идеяларды жана түшүнүктөрдү түшүнөбүз, тиркемени Model, View, Controller модулдарына кантип бөлүү керектигин этап-этабы менен карап көрөлү, ошондой эле кичинекей веб-тиркемени жаз. Spring-Boot жана Spring-MVCди мисал катары колдонуп, берorштер Java codeунан html баракчаларына кантип которуларын карап көрөлү. Бул материалды түшүнүү үчүн, дизайн үлгүлөрү, өзгөчө Observer жана Facade менен тааныш болушуңуз керек. HTTP сурамдары жана жооптору менен тааныш болуңуз, html негиздерин түшүнүңүз, Java тorнде кандай annotationлар бар экенин бorңиз. Артыңызга отуруңуз, чай кайнатыңыз, десерт, салат, негизги тамак жана биринчи тамак даярдаңыз. Биз баштайбыз.

MVC тарыхы

MVC идеялары 70-жылдардын аягында Xerox PARCде иштеп жүргөндө Тригве Реенскауг тарабынан иштелип чыккан. Ал убакта компьютер менен иштөө orмий даражасыз жана көлөмдүү documentтерди тынымсыз изилдөө мүмкүн эмес болчу. Реенскауг абдан күчтүү иштеп чыгуучулардын тобу менен бирге чечкен маселе жөнөкөй колдонуучунун компьютер менен өз ара аракеттенүүсүн жөнөкөйлөтүү болгон. Бир жагынан өтө жөнөкөй жана түшүнүктүү, экинчи жагынан компьютерди жана татаал тиркемелерди башкарууга мүмкүндүк бере турган куралдарды түзүү керек болчу. Реенскауг Алан Кэйдин жетекчorги астында "бардык курактагы балдар үчүн" портативдик компьютерди - Dynabook, ошондой эле SmallTalk тorн иштеп чыккан командада иштеген. Дал ошондо жана ошол жерде достук интерфейстин концепциялары түзүлгөн. Реенскаугдун өз командасы менен иштөөсү IT тармагынын өнүгүшүнө чоң таасирин тийгизген. Келгиле, MVCге түздөн-түз тиешеси жок, бирок ошол окуялардын маанисин көрсөткөн кызыктуу фактыны келтирели. 2007-жылы Apple iPhone телефонунун бет ачарынан кийин Алан Кэй: «Макинтош чыкканда, Newsweek бул жөнүндө кандай ойдо экенин сурады. Мен мындай дедим: бул сынга татыктуу биринчи персоналдык компьютер. Презентациядан кийин Стив Джобс келип: iPhone сынга татыктуубу? Мен айттым, аны бештен сегиз сантиметрге жаса, ошондо сен дүйнөнү багындырасың». Үч жылдан кийин, 2010-жылдын 27-январында Apple 9,7 дюймдук iPad смартфонун сунуштаган. Башкача айтканда, Стив Жобс Алан Кэйдин кеңешин дээрлик түзмө-түз аткарган. Реннскауг иштеген долбоор 10 жылга созулган. Анын жаратуучуларынан MVC жөнүндө биринчи басылма дагы 10 жылдан кийин жарык көргөн. Мартин Фаулер, программалык камсыздоонун архитектурасы боюнча бир катар китептердин жана макалалардын автору, ал MVCди SmallTalkтин жумушчу versionсынан үйрөнгөнүн айтат. MVC жөнүндө узак убакыт бою баштапкы булактан эч кандай маалымат болбогондуктан, ошондой эле бир катар башка себептерден улам, бул концепциянын көп сандагы ар кандай чечмелөөлөрү пайда болду. Натыйжада, көптөгөн адамдар MVCди дизайн схемасы же үлгүсү деп эсептешет. Көбүнчө, MVC комплекстүү үлгү же татаал тиркемелерди ишке ашыруу үчүн чогуу иштеген бир нече үлгүлөрдүн айкалышы деп аталат. Бирок, чындыгында, мурда айтылгандай, MVC биринчи кезекте ар кандай үлгүлөрдү колдонуу менен ар кандай жолдор менен ишке ашырыла турган архитектуралык идеялардын/принциптердин/мамилелердин жыйындысы... Андан кийин биз MVC концепциясына камтылган негизги идеяларды кароого аракет кылабыз.

MVC деген эмне: негизги идеялар жана принциптер

  • VC – колдонуучунун интерфейси бар татаал маалыматтык системаларды куруу үчүн архитектуралык идеялардын жана принциптердин жыйындысы;
  • MVC - бул Model-View-Controller дегенди билдирген акроним.
Disclaimer: MVC дизайн үлгүсү эмес. MVC так колдонуучу интерфейси бар татаал системаларды куруу үчүн архитектуралык идеялардын жана принциптердин жыйындысы . Бирок ыңгайлуу болушу үчүн, ар бир жолу кайталанбашы үчүн: "Архитектуралык идеялардын жыйындысы ...", биз MVCди үлгү деп атайбыз. Келгиле, жөнөкөй нерседен баштайлы. Model-View-Controller деген сөздөрдүн артында эмне жашырылган? Колдонуучу интерфейси бар системаларды иштеп чыгууда, MVC үлгүсүнө ылайык, системаны үч компонентке бөлүү керек. Булар, өз кезегинде, модулдар же компоненттер деп атоого болот. Каалаганыңды айт, бирок үчкө бөл. Ар бир компоненттин өзүнүн максаты болот. Модел. Биринчи компонент/модуль деп аталган модель болуп саналат. Бул колдонмонун бардык бизнес логикасын камтыйт. Көрүү. Системанын экинчи бөлүгү - бул көрүнүш. Бул модул колдонуучуга маалыматтарды көрсөтүү үчүн жооптуу. Колдонуучу көргөн нерселердин баары көрүнүш тарабынан түзүлөт. Controller. Бул чынжырдын үчүнчү звеносу контроллер болуп саналат. Ал колдонуучунун аракеттерин иштетүү үчүн жооптуу болгон codeду сактайт (системадагы колдонуучунун каалаган аракети контроллерде иштетилет). Модель системанын эң көз карандысыз бөлүгү болуп саналат. Көз карандысыз болгондуктан, ал View жана Controller модулдары жөнүндө эч нерсе билбеши керек. Модель ушунчалык көз карандысыз болгондуктан, аны иштеп чыгуучулар View жана Controller жөнүндө дээрлик эч нерсе бorшпейт. Көрүнүштүн негизги максаты – Моделден маалыматты колдонуучуга ыңгайлуу форматта берүү. Көрүнүштүн негизги чектөөсү бул моделди эч кандай түрдө өзгөртпөшү керек. Контроллердин негизги максаты - колдонуучунун аракеттерин иштетүү. Колдонуучу моделге өзгөртүүлөрдү Контроллер аркылуу киргизет. Тагыраак айтканда, моделде сакталган маалыматтарга. Сизге лекцияда көрсөтүлгөн схеманы дагы бир жолу берели: 7-бөлүк. MVC үлгүсүнө киришүү (Model-View-Controller) - 2Мунун бардыгынан биз толугу менен логикалык жыйынтык чыгара алабыз. Татаал система модулдарга бөлүнүшү керек. Келгиле, мындай бөлүнүүгө кантип жетишүү боюнча кадамдарды кыскача сүрөттөп берели.

1-кадам: Колдонмонун бизнес логикасын колдонуучу интерфейсинен бөлүңүз

MVCтин негизги идеясы - колдонуучу интерфейси бар ар кандай тиркеме, биринчи болжол менен 2 модулга бөлүнөт: колдонмонун бизнес логикасын ишке ашыруу үчүн жооптуу модул жана колдонуучу интерфейси. Биринчи модул тиркеменин негизги функцияларын ишке ашырат. Бул модул колдонмо домен модели ишке ашырылган системанын өзөгү болот. MVC концепциясында бул модул биздин М тамгасы болот, б.а. модель. Экинчи модул колдонуучуга маалыматтарды көрсөтүүнү жана колдонуучунун тиркеме менен өз ара аракеттенүүсүнүн логикасын кошкондо, бүт колдонуучу интерфейсин ишке ашырат. Бул бөлүүнүн негизги максаты системанын өзөгүн (MVC терминологиясындагы Модель) өз алдынча иштеп чыгууну жана сыналышын камсыз кылуу болуп саналат. Мындай бөлүнүүдөн кийин колдонмонун архитектурасы төмөнкүдөй болот: 7-бөлүк. MVC үлгүсүнө киришүү (Model-View-Controller) - 3

2-кадам. Observer үлгүсүн колдонуп, моделдин көбүрөөк көз карандысыздыгына, ошондой эле колдонуучу интерфейстерин синхрондоштурууга жетишиңиз

Бул жерде биз 2 максатты көздөйбүз:
  1. Үлгүнүн дагы көбүрөөк көз карандысыздыгына жетишиңиз.
  2. Колдонуучу интерфейстерин синхрондоштуруу.
Төмөнкү мисал колдонуучу интерфейстерин синхрондоштуруу эмнени билдирерин түшүнүүгө жардам берет. Кино билетин онлайн сатып алып, театрдагы бош орундардын санын көрөбүз дейли. Биз менен бир убакта киного билетти дагы бирөө сатып алат. Эгер кимдир бирөө бизден мурун билет сатып алса, биздин сессияга бош орундардын саны азайганын көргүбүз келет. Эми муну программанын ичинде кантип ишке ашырса болорун ойлонуп көрөлү. Бизде системанын өзөгү (биздин моделибиз) жана интерфейсибиз (биз сатып алган веб-баракча) бар дейли. Сайтта 2 колдонуучу бир убакта орун тандайт. Биринчи колдонуучу билет сатып алды. Экинчи колдонуучу бул маалыматты баракта көрсөтүшү керек. Бул кандай болушу керек? Системанын өзөгүнөн интерфейсти жаңыртсак, ядробуз, моделибиз интерфейске көз каранды болот. Моделди иштеп чыгууда жана сынап көрүүдө интерфейсти жаңыртуу үчүн ар кандай жолдорду эстен чыгарбоо керек. Буга жетүү үчүн сиз Observer үлгүсүн ишке ашырууңуз керек. Анын жардамы менен модель бардык абоненттерге өзгөртүүлөр жөнүндө эскертмелерди жөнөтөт. Интерфейс мындай абонент болуп, эскертмени жана жаңыртууну алат. Observer үлгүсү моделге, бир жагынан, интерфейске (көрүнүш жана контроллер) андагы өзгөрүүлөр жөнүндө маалымат берүүгө, ал эми экинчи жагынан, алар жөнүндө эч нерсе "билбөөгө" жана ошону менен көз карандысыз бойдон калууга мүмкүндүк берет. Башка жагынан алганда, бул колдонуучу интерфейстерин синхрондоштурууга мүмкүндүк берет.

Кадам 3. Интерфейсти View жана Controller деп бөлүү

Биз тиркемени модулдарга бөлүүнү улантабыз, бирок иерархиянын төмөнкү деңгээлинде. Бул кадамда колдонуучунун интерфейси (1-кадамда өзүнчө модулга бөлүнгөн) көрүнүшкө жана контроллерге бөлүнөт. Көрүнүш менен контроллердин ортосунда катуу сызык салуу кыйын. Көрүнүш колдонуучу көргөн нерсе, ал эми контроллер колдонуучу система менен өз ара аракеттене ала турган механизм деп айтсак, анда кандайдыр бир карама-каршылык бар. Веб баракчадагы баскычтар же телефондун экранындагы виртуалдык клавиатура сыяктуу башкаруу элементтери негизинен контроллердин бир бөлүгү болуп саналат. Бирок алар колдонуучуга көрүнүштүн кандайдыр бир бөлүгү сыяктуу эле көрүнүп турат. Бул жерде функционалдык бөлүнүү жөнүндө көбүрөөк сөз болуп жатат. Колдонуучу интерфейсинин негизги милдети – колдонуучунун система менен өз ара аракеттенүүсүн камсыз кылуу. Бул интерфейсте 2 гана функция бар экенин билдирет:
  • колдонуучуга система жөнүндө маалыматты көрсөтүү жана ыңгайлуу көрсөтүү;
  • колдонуучунун маалыматтарын жана буйруктарын системага киргизүү (аларды системага берүү);
Бул функциялар интерфейстин модулдарга кантип бөлүнүшү керектигин аныктайт. Натыйжада, системанын архитектурасы төмөнкүдөй көрүнөт: 7-бөлүк. MVC үлгүсүнө киришүү (Model-View-Controller) - 4Ошентип, бизде Модель, Көрүү жана Контроллер деп аталган үч модулдан турган тиркеме бар. Жыйынтыктап айтканда:
  1. MVC принциптерине ылайык, система модулдарга бөлүнүшү керек.
  2. Эң маанилүү жана көз карандысыз модул модель болушу керек.
  3. Модел системанын өзөгү болуп саналат. Сиз аны интерфейстен көз карандысыз иштеп чыгуу жана сынап көрүү жөндөмүңүз керек.
  4. Бул үчүн, системаны бөлүүнүн биринчи этабында, аны моделге жана интерфейске бөлүү керек.
  5. Андан кийин, Observer үлгүсүн колдонуу менен, биз моделдин көз карандысыздыгын бекемдейбиз жана колдонуучу интерфейстеринин синхронизациясын алабыз.
  6. Үчүнчү кадам - ​​интерфейсти контроллерге жана көрүнүшкө бөлүү.
  7. Колдонуучудан системага маалыматты киргизүү үчүн контроллерге гана талап кылынат.
  8. Системадан колдонуучуга маалымат чыгара турган нерселердин баары көрүнүп турат.
Талкуулоо үчүн дагы бир маанилүү нерсе калды, сиз Howао ичсеңиз болот.

Көрүнүш менен Контроллер менен Моделдин ортосундагы мамиле жөнүндө бир аз

Колдонуучу контроллер аркылуу маалыматты киргизгенде, ал муну менен моделге өзгөртүүлөрдү киргизет. Жок дегенде колдонуучу моделдин маалыматтарына өзгөртүүлөрдү киргизет. Колдонуучу маалыматты интерфейс элементтери аркылуу (Көрүү аркылуу) алганда, колдонуучу моделдин маалыматтары жөнүндө маалымат алат. Бул кантип болот? Көрүнүш жана Контроллер модел менен кантип иштешет? Анткени, View класстары маалыматтарды окуу/жазуу үчүн Модель класстарынын ыкмаларын түздөн-түз колдонушу мүмкүн эмес, антпесе Модельдин көз карандысыздыгы жөнүндө сөз болушу мүмкүн эмес. Модель бири-бири менен тыгыз байланышта болгон класстардын жыйындысын билдирет, аларга Көрүнүш да, Контроллер да кирүүгө тийиш эмес. Моделди Көрүнүш жана Контроллер менен туташтыруу үчүн Фасад дизайн үлгүсүн ишке ашыруу керек. Модель фасады Модель менен интерфейстин ортосундагы катмар болуп калат, ал аркылуу View ыңгайлуу форматта маалыматтарды алат, ал эми Контроллер керектүү фасад ыкмаларын чакыруу менен маалыматтарды өзгөртөт. Схема боюнча, акырында, баары мындай болот: 7-бөлүк. MVC үлгүсүнө киришүү (Model-View-Controller) - 6

MVC: кандай пайдасы бар?

MVC принциптерин сактоонун негизги максаты - тиркеменин бизнес логикасын (моделинин) ишке ашырууну анын визуализациясынан (көрүү) бөлүү. Бул бөлүү codeду кайра колдонууну көбөйтөт. MVCди колдонуунун артыкчылыктары колдонуучу бир эле маалыматтарды ар кандай формада бериши керек болгон учурларда ачык-айкын болот. Мисалы, table, график же диаграмма түрүндө (ар кандай түрлөрүн колдонуу менен). Ошол эле учурда, көрүүлөрдүн ишке ашырылышына таасир этпестен, сиз колдонуучунун аракеттерине реакцияны өзгөртө аласыз (баскычты басуу, маалыматтарды киргизүү). Эгерде сиз MVC принциптерин кармансаңыз, анда сиз программаларды жазууну жөнөкөйлөтө аласыз, codeдун окулушун жогорулата аласыз жана келечекте системаны кеңейтүүнү жана тейлөөнү жеңилдете аласыз. "Ишкананы өнүктүрүүгө киришүү" сериясынын жыйынтыктоочу материалында биз мисал катары Spring-MVCди колдонуу менен MVCди ишке ашырууну карайбыз. 8-бөлүк. Жазгы жүктөөдө чакан арыз жазуу
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION