Badral's personal blog
Интернет миний ертөнцийг хардаг цонх …

Posts Tagged ‘Design pattern’

Is MVC a design pattern or an architectural style?

Monday, September 7th, 2015

Өнөөдөр Болор агуулга удирдах системээ шинэчилж байгаад MVC-г 2012 оны “Програм хангамжийн архитектур” лекц дээрээ MVC-г дизайн паттерн сэдэв рүү оруулж зааж байснаа саналаа. MVC-н уг үндсийг хөөвөл яах аргагүй дизайн паттерн юм. Гол үзэл санаа нь separation of concern буюу өгөгдөл, өгөгдлийн боловсруулалт, өгөгдлийн дүрслэлийг салгаж хэрэгжүүлэх концепц.
Дэлхийн анхны объект хандалтат хэлээр Simula болон Smalltalk-г хүлээн зөвшөөрдөг. 1979 онд норвегийн информатикч Trygve Reenskaug анх энэхүү ухагдахууныг Smalltalk платформын хэрэглэгчийн интерфейсийг зохиож байхдаа гаргаж ирсэн юм. Энд Smalltalk-г яагаад платформ гэсэн бэ гэхээр энэ зөвхөн програмчлалын хэл биш програмчлалын бүрэн орчин байв. Тэр бүү хэл жаваг гарахаас тээр өмнө та виндовс дээр smalltalk-р хөгжүүлсэн програмаа линүкс, соларис дээр ажиллуулж болдог байсан.
MVC-н талаар анхлан сонсож байгаа зарим уншигчдадаа зориулаад тус ухагдахууныг энгийн үгээр нуршчихъя.
M нь Model гэсэн үгийн эхний үсэг бөгөөд хэрэглэгчид дүрслэн үзүүлэх өгөгдлийг агуулж буй давхаргыг нэрлэж буй. Загвар нь залуур болон харагдцын аль алиныг танихгүй. Энэ нь энэ давхаргын объект харагдац болон залуурын давхаргын объектыг огт дуудахгүй гэсэн үг юм.
View гэсэн үгийн эхний үсэг болох V нь харагдац буюу Загвараас авсан өгөгдлийг хэрэглэгчид дүрслэн үзүүлэх үүрэгтэй давхарга. Програм болоод хэрэглэгч хоёрын харилцан үйлчлэлийн зааг гэж үзэж болно. Загвараас ирсэн өгөгдөл болоод хэрэглэгчээс ирсэн үйлдлийн (Controller-н тусламжтай) аль алиныг мэдэх боловч цааш боловсруулалт хийхгүй.
C нь Controller гэсэн үгийн товчлол бөгөөд залуур гэж ойлгож болно. Залуур нь харагдцаас хэрэглэгчийн үйлдлийг хүлээн авч шалгаж дүгнээд хариу үзүүлнэ. Ийнхүү хэрэглэгчийн үйлдэл гүйцэтгэгдэж, дэлгэц дээр харагдцаар хариу өгнө. Нэг залуур нэг буюу хэд хэдэн харагдцыг удирдаж болох ба нөгөө талаас нэг харагдац зөвхөн нэг залууртай байна.
Сонирхсон хүмүүс интернетээр хайгаад цааш уншина биз ээ. Одоо гол сэдэв рүүгээ буцаад оръё.
Орчин үед л бэлэн форм, контролууд (бүр event-үүдтэй шүү) тавиад хэрэглэгчийн интерфейсийг хийгээд байгаа болохоос хэрэглэгчийн интерфейс, харилцан үйлчлэл гэдэг бол үнэндээ програмчлалын хамгийн хүнд хэсэг байдаг. За тэгээд тест нь бол бүр ч явдалтай.
За тэгэхээр 1979 онд smalltalk дээрээ яваад очихоор ямар байсан байх вэ? Одоо жава дээр awt, swing ашиглаж хэрэглэгчийн интерфейс үүсгэдгээс долоон дор гэсэн үг шүү дээ. Нэг л том Canvas объект авч байгаад бүгдийг нь зурж өгнө гэсэн үг. Энэхүү хэрэглэгчийн интерфейсийн асуудлыг шийдэхийн тулд MVC зохиогдсон. Харагдац нь Загварыг байнга сонсох ба энэ хэсэг нь Observer паттернаар хэрэгждэг. Залуураар дамжин Загварт өөрчлөлт ороход Харагдац өөрөө шинэчлэгдэнэ гэсэн үг.
Гэтэл орчин үед бид Харагдацыг ерөнхийдөө дэсктоп програмуудын хувьд бэлэн Контрол(button, textbox, checkbox, combobox …) вэб програмуудын хувьд HTML, CSS-р төсөөлөх хэмжээнд ирсэн. Мэдээж доод төвшний эсвэл тоглоом зэрэгт өөрсдөө зурахаас өөр аргагүй хэрэглээ нэлээд бий нь бий.
Мөн сүүлийн үед толгойтой болгон MVC ашиглаж вэб хийдэг гэж ярьдаг бичдэг болжээ. Энд л асуудлын гол байгаа юм.
Хэрвээ Вэб програмыг MVC ашиглан хийж байна гэж үзвэл Архитектур стилл болно. Харин классик утгаар нь ярьж байвал дизайн паттерн. Гол асуудал нь нэр нь яг адилхан байгаа нь тун буруу юм. Ядаж MVCA буюу Model View Controller Architecture гэчихсэн бол зүйтэй байх байлаа. Аналогоор зүйрлэвээс “харьцангуйн онол” макро төвшинд хүчинтэй харин “Квант онол” микро төвшинд хүчинтэй гэдэг шиг өөр өөр нэртэй байх байсан юм. Физикчдэд энэ тал дээр хүндэтгэл үзүүлэх хэрэгтэй.
Жич:
Сүүлийн үед моод болоод байгаа вэб фрэймворкуудын хувьд MVC архитектуртай гэдэг нь худлаа байгаа юм. Учир нь тэд MVC-н Observer хэсгийг хэрэгжүүлэхдээ Харагдцаас дандаа хүсэлт явуулж шинэчлэлээ хийдэг. Үнэндээ үүнийг вэб програмын хувьд хэрэгжүүлэх нь асар хүндрэлтэй л дээ. Вэб соккет ашиглахгүй бол бараг бүтэшгүй. HTTP буюу тасралттай протоколл ашиглаж хэрэгжүүлэх тун ч түвэгтэй бөгөөд зардал өндөртэй. Уул шугамдаа бол эдгээр фрэймворкууд “Model 2” гэдэг архитектуртай. Үүнийг MVC төст архитектур гэж үзэж болно. Түүнээс гадна MVP, MVVM зэрэг MVC төст архитектурууд нэлээд бий.