MVC կաղապարը և PHP-ն մաս 1

| Մայիս 5, 2015 | Մեկնաբանված չէ |

Ծրագրավորման MVC կաղապարը ի սկզբանե ձևավորվել է 1970-ական թվականներին: Այն հանդիսանում է ծրագրային ճարտարապետության օրինակ, որի գաղփարն է՝ առանձնացնել տվյալների ներկայացումը  այն մեթոդներից, որոնք փոխազդում են տվյալների հետ: Տեսականորեն լավ զարգացած MVC կաղապարը թույլ է տալիս front-end և back-end ծրագրավորողներին միաժամանակ աշխատել նույն համակարգում,առանց միջամտելու, փոխանակելու կամ խմբագրելու մեկը մյուսի աշխատանքը:

Չնայած նրան, որ MVC-ն սկզբնական շրջանում նախատեսված էր անձնական համակարգիչների համար, այն հարմարացվել է և լայնորեն օգտագործվում է նաև վեբ ծրագրավորողների կողմից, շնորհիվ այն բանի, որ շեշտը դրվում է խնդիրների նպատակահարմար տարանջատման վրա, այսպիսով՝ մատչելի դարձնելով կոդի բազմակի օգտագործումը: Մոդելը ներկայացնում է մեդուլային համակարգերի զարգացումը, ինչը թույլ է տալիս ծրագրավորողին արագ փոփոխել, ավելացնել և նույնիսկ հեռացնել ֆունկցիոնալը:

Այս հոդվածում ներկայացված են MVC-ի գաղափարները,որոնք ներառված են մոդելի սահմանման մեջ, և օրինակ, որը ներկայացնում է, թե ինչպես MVC֊ն  կիրառել PHP-ում: Այս հոդվածը նախատեսված է նրանց համար, ովքեր երբևէ չեն կիրառել MVC կաղապարը կամ ցանկանում են թարմացնել իրենց հմտությունները և ամրապնդել գիտելիքները:

 

MVC կաղապարի հասկացությունները

Կաղապարի անվանումը կազմված է 3 հիմնական մասերից՝ Մոդել (Model), արտաքին Տեսք (View),  Վերահսկիչ (Controller): MVC կաղապարի ամբողջական և պատկերավոր ներկայացումը կարելի է տեսնել հետևյալ սխեմայի միջոցով՝

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 հոդվածի թարգմանությունն է։

MVC կաղապարը և PHP-ն մաս 1, 9.3 out of 10 based on 3 ratings

Նշագրեր: , , , , , ,

Բաժին: PHP

Կիսվել , տարածել , պահպանել

VN:F [1.9.20_1166]
Rating: 9.3/10 (3 votes cast)

Մեկնաբանեք

Կհաստատվեն միայն մեսրոպատառ հայերենով գրած մեկնաբանությունները

198