Ծրագրավորման MVC կաղապարը ի սկզբանե ձևավորվել է 1970-ական թվականներին: Այն հանդիսանում է ծրագրային ճարտարապետության օրինակ, որի գաղփարն է՝ առանձնացնել տվյալների ներկայացումը այն մեթոդներից, որոնք փոխազդում են տվյալների հետ: Տեսականորեն լավ զարգացած MVC կաղապարը թույլ է տալիս front-end և back-end ծրագրավորողներին միաժամանակ աշխատել նույն համակարգում,առանց միջամտելու, փոխանակելու կամ խմբագրելու մեկը մյուսի աշխատանքը:
Չնայած նրան, որ MVC-ն սկզբնական շրջանում նախատեսված էր անձնական համակարգիչների համար, այն հարմարացվել է և լայնորեն օգտագործվում է նաև վեբ ծրագրավորողների կողմից, շնորհիվ այն բանի, որ շեշտը դրվում է խնդիրների նպատակահարմար տարանջատման վրա, այսպիսով՝ մատչելի դարձնելով կոդի բազմակի օգտագործումը: Մոդելը ներկայացնում է մեդուլային համակարգերի զարգացումը, ինչը թույլ է տալիս ծրագրավորողին արագ փոփոխել, ավելացնել և նույնիսկ հեռացնել ֆունկցիոնալը:
Այս հոդվածում ներկայացված են MVC-ի գաղափարները,որոնք ներառված են մոդելի սահմանման մեջ, և օրինակ, որը ներկայացնում է, թե ինչպես MVC֊ն կիրառել PHP-ում: Այս հոդվածը նախատեսված է նրանց համար, ովքեր երբևէ չեն կիրառել MVC կաղապարը կամ ցանկանում են թարմացնել իրենց հմտությունները և ամրապնդել գիտելիքները:
MVC կաղապարի հասկացությունները
Կաղապարի անվանումը կազմված է 3 հիմնական մասերից՝ Մոդել (Model), արտաքին Տեսք (View), Վերահսկիչ (Controller): MVC կաղապարի ամբողջական և պատկերավոր ներկայացումը կարելի է տեսնել հետևյալ սխեմայի միջոցով՝
Պատկերը ցույց է տալիս տվյալների հոսքի ներկայացումը, ինչպես նաև, թե ինչպես է կապվում յուրաքանչյուր կոմպոնենտ մեկը մյուսի հետ և ի վերջո յուրաքանչյուր կոմպոնենտի աշխատանքի կապը մեկը մյուսի հետ:
Մոդել (Model)
Մոդելը նախատեսված է տվյալների մշտական պահպանման համար, որը օգտագործվում է ամբողջական դիզայնի մեջ: Այն պետք է ապահովի տվյալների հասանելիություն, կամ հավաքագրի և գրառի տվյալները հանդիսանալով կամուրջ Տեսքի (View) և Վերահսկիչի (Controller) միջև:
Մոդելի կարևոր առանձնահատկություններից մեկն այն է, որ այն տեխնիկապես «կույր» է՝ նկատի ունենալով, որ Մոդելը չունի համապատասխան տեղեկատվություն, թե ինչ է կատարվում, երբ տվյալը տեղափոխվում է արտաքին Տեսք կամ Վերահսկիչ: Այն ոչ կանչում և ոչ էլ փնտրում է արձագանք այլ կոմպոնենտներից: Մոդելի միակ նպատակն է տեղափոխել տվյալները մշտական բազա կամ փնտրել և նախապատրաստել տվյալներ որոնք պետք է անցնեն այլ կոմպոնենտներով:
Մոդելը այնուամենայնիվ չի կարելի պարզապես հասկանալ, որպես տվյալների բազա կամ կամուրջ մեկ այլ համակարգի համար, որը իրականացնում է տվյալների փոխանցում: Այն պետք է հանդես գա որպես տվյալների ընդունիչ, առանց խոչընդոտների ընդունելով բոլոր եկող հարցումները: Հաճախ MVC-ի ամենաբարդ մասը հանդիսանում է Մոդելի բաղադրիչը, որը ամբողջ համակարգի գագաթն է, քանի որ առանց նրա չկա կապ Տեսքի և Վերահսկիչի միջև:
Արտաքին տեսք (View)
Տեսքն այն կոմպոնենտն է, որտեղ ցուցադրվում են Մոդելից պահանջված տվյալները: Այն տեսանելի է, այսպիսով որոշված է նրա վերջնական տեսքը: Ավանդաբար MVC-ի կիրառմամբ նախագծված վեբ էջերում, Տեսքն հանդիսանում է համակարգի այն մասը, որտեղ գեներացվում և ցուցադրվում է HTML-ը: Տեսքը նաև ստանում է ազդակներ օգտատիրոջից, ով շարունակում է կապ ստեղծել Վերահսկիչի հետ: Դրա վառ օրինակ է կոճակը՝ որը ստեղծված է Տեսքի կողմից: Օգտատերը սեղմելով կոճակին գործողություն է կատարում Վերահսկիչում:
Կան որոշակի տարաձայնություններ կապված Տեսք բաղադրիչի հետ, մասնավորապես վեբ-ծրագրավորողների կողմից, ովքեր օգտագործում են MVC-ն իրենց աշխատանքներում: Այդպիսի օրինակ է հանդիսանում, երբ Տեսքը չունի ոչ մի կապ Մոդելի հետ և, որ Տեսքում տեղադրված բոլոր տվյալները անցնում է Վերահսկիչի միջոցով: Իրականում այս տեսակետը ժխտում է վերևում նշված MVC մոդելի ամբողջական տեսությունը: Ֆաբիո Սևասկոյի The CakePHP Framework:Your First Bite հոդվածը ներկայացնում է այս խճճված MVC-ի տարբերակը CakePHP կառուցվածքում, որը օրինակ է ոչ ավանդական MVC PHP կառուցվածքի՝
Կարևոր է հիշել MVC-ի ճարտարապետության ճիշտ կիրառության մասին, չպետք է լինի կապ Տեսքի և Մոդելի միջև: Բոլոր տրամաբանական գործողությունները կատարվում են Վերահսկիչի միջոցով:
Ավելին, Տեսքի նկարագրությունը որպես ձևանմուշ ճիշտ սահմանված չէ: Այնուամենայնիվ ինչպես նշում է Թոմ Բատլերը սա մեկ մարդու սխալ չէ, այլ սխալների բազմապատկում բազմաթիվ ծրագրավորողների կողմից, որն էլ նպաստում է ծրագրավորողների կողմից MVC-ի սխալ ըմբռնմանը: Այնուհետև նրանք սխալ են ուսուցանում մյուսներին: Տեսքն ավելին է քան ձևանմուշը (template)։ Սակայն ժամանակակից MVC հենքերը (frameworks) այնքան են ոգեշնչված այս կառուցվածքներով, որ Տեսքը հասցվում է այնպիսի աստիճանի, որ ոչ մեկ իրականում չի մտահոգվում,արդյոք կառուցվածքը որդեգրում է ճիշտ MVC կաղապար, թե ոչ:
Կարևոր է հիշել, որ Տեսք բաղադրիչը չպիտի անմիջականորեն ստանա տվյալներ Վերահսկիչից: Ինչպես նշվեց չպիտի լինի ուղիղ կապ Տեսքի և Վերահսկիչի միջև առանց Մոդելի:
Վերահսկիչ (Controller)
Եռյակի վերջին բաղադրիչը Վերահսկիչն է: Նրա աշխատանքն է կառավարել տվյալները, որոնք օգտատերը ավելացնում է համապատասխանաբար թարմացնելով մոդելը: Վերահսկիչի աշխատանքը խիստ կապված է օգտատիրոջ հետ, առանց այդ փոխազդեցության Վերահսկիչը իմաստ չունի:
Վերահսկիչը կարելի է ներկայացնել որպես տեղեկատվության կուտակիչ,որը հետո անցնում է Մոդելի միջով և չի պարունակում ոչ մի տրամաբանություն բացի մուտքերը հավաքելու համար անհրաժեշտից։ Վերահսկիչը կապվում է միայն մեկ մոդելի և միայն մեկ Տեսքի հետ,դարձնելով այն միակողմանի տվյալների հոսքի համակարգ, տվյալների փոխանակման յուրաքանչյուր կետում:
Կարևոր է հիշել, որ Վերահսկիչին տրվում է խնդիր, երբ օգտատերը առաջին անգամ փոխազդում է Տեսքի հետ և Վերահսկիչի յուրաքանչյուր ֆունկցիա Տեսքի հետ օգտատիրոջ խոփազդեցությունից առաջացած ձգան (trigger) է հանդիսանում : Ծրագրավորողների կողմից թույլ տրվող ամենաընդհանուր սխալը խառնաշփոթ ստեղծելն է, հանձնարարելով նրան գործողություններ և պարտականություններ որոնք պետք է ունենա Տեսքը (սա հիմնականում ծրագրավորողի կողմից Տեսքը և կաղապարը իրար հետ շփոթելու խառնելու արդյունք է): Լրացուցիչ կարելի է ավելացնել, որ տարածված սխալներից է համարվում Վերահսկիչում այնպիսի ֆունկցիաների իրականացումը, որոնց հիմնական գործողությունն է տվյալների անցման, մշակման պարտավորությունները Մոդելից դեպի Տեսք ,միչդեռ MVC կաղապարում այս կապը պետք է իրականացվի Մոդելի և Տեսքի միջոցով:
MVC-ն PHP-ում
Կարելի է գրել վեբ ծրագրի PHP-ով հիմնվելով MVC ճարտարապետական կաղապարի վրա: Սկսենք հիմնական՝ կմախքային, օրինակից
<?php class Model { public $string; public function __construct(){ $this->string = "MVC + PHP = Awesome!"; } }
<?php class View { private $model; private $controller; public function __construct($controller,$model) { $this->controller = $controller; $this->model = $model; } public function output(){ return "<p>" . $this->model->string . "</p>"; } }
<?php class Controller { private $model; public function __construct($model) { $this->model = $model; } }
Մենք սկսել ենք մեր ծրագիրը MVC կաղապարի յուրաքանչյուր մասի համար գրելով պարզ դասերից (Class) բաղկացած կոդ, այժմ անհրաժեշտ է ստեղծել կապ նրանց միջև
<?php $model = new Model(); $controller = new Controller($model); $view = new View($controller, $model); echo $view->output();
Ինչպես տեսնում եք կոդում չկան Վերահսկիչին վերաբերվող գործողություններ, քանի որ մենք չունենք օգտատեր,ով կարող է օգտվել ծրագրից: Տեսքը պահում է բոլոր ֆունկցիաները ցուցադրման նպատակով:
Այժմ ընդլայնենք օրինակը ցույց տալու համար թե ինչպես ավելացնել Վերահսկիչի ֆունկցիոնալությունը, այդպիսով ավելացնելով նաև ծրագրի ինտերակտիվությունը.
<?php class Model { public $string; public function __construct(){ $this->string = “MVC + PHP = Awesome, click here!”; } }
<?php class View { private $model; private $controller; public function __construct($controller,$model) { $this->controller = $controller; $this->model = $model; } public function output() { return '<p><a href="mvc.php?action=clicked"' . $this->model->string . "</a></p>"; } }
<?php class Controller { private $model; public function __construct($model){ $this->model = $model; } public function clicked() { $this->model->string = “Updated Data, thanks to MVC and PHP!” } }
Մենք արդեն համալրել ենք ծրագիրը որոշ հիմնական ֆունկցիաներով: Կապ հաստատենք բաղադրիչների միջև հետևյալ ձևով.
<?php $model = new Model(); $controller = new Controller($model); $view = new View($controller, $model); if (isset($_GET['action']) && !empty($_GET['action'])) { $controller->{$_GET['action']}(); } echo $view->output();
Աշխատացրեք կոդը և երբ սեղմեք հղումը, դուք կկարողանաք տեսնել տող, որը փոխում է տվյալները:
Եզրակացություն
Մենք ներկայացրեցինք MVC-ի հիմնական գաղափարները և ստեղծեցինք բավականին պարզ ծրագրի օրինակ: Բայց մենք դեռ երկար ճանապարհ ունենք որպեսզի ստանանք ավելի լավ ծրագիր:
Հաջորդ հոդվածում մենք կներկայացնենք, որոշակի հնարավորություններ, որոնց դուք հանդիպում եք, երբ փորձում եք ստեղծել ճիշտ MVC ներկայացումներ PHP-ի միջոցով:
Շարունակելի ․․․
Հոդվածը The MVC Pattern and PHP, Part 1 հոդվածի թարգմանությունն է։
Comments: no replies