site logo
  • Կայքի մասին
  • Ծրագրավորում
  • Ժեշտ
  • Անվտանգություն
  • Հարց ու Պատասխան (ՀուՊ)
Մայիս 5, 2015  |  By hayarpi In

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

MVC

Ծրագրավորման 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.6 out of 10 based on 5 ratings
Controller Model MVC OOP patterns PHP view ծրագրավորման կաղապարներ
Previous StoryC++ | Ցուցիչներ | Pointers
Next StoryC++ | Յղումները եւ ցուցիչները ֆունկցիայում

Comments: no replies

Join in: leave your comment Cancel Reply

(will not be shared)

Որոնում

Նշագրեր

android (12) C++ (10) C և C++ (11) Excel (10) html (10) Network Administration (16) System Administration (28) Windows 7 (14) Անվտանգություն (26) ԳՆՈՒ/Լինուքս (16) Թեյնիկներին (55) Ժեշտ (29) Լակոնիկ (21) Լինուքս/Յունիքս հրամաններ (23) Լուսանկարչություն և մշակում (15) Խելախոսներ (14) Ծրագրավորման լեզուներ (13) Ծրագրավորում (43) Ծրագրեր (46) Հայականացում (28) Հումոր (11) Ուսումնական նյութեր (33) Չդասակարգված (11) Սոցցանցային Հմտություններ (19) Վեբ (24) Վերլուծություն (10) Վինդոուս 7 (10) Վորդպրես (21) ՏՏ և փիլիսոփայություն (21) Տվյալների բազաներ (12) Օպերացիոն համակարգեր (25) Օֆիսային ծրագրեր (22) անդրոիդ (11) բաշ (10) ինտերնետ (11) խելախոսներ (13) համացանց (15) հայատառ (10) հայերեն (11) հայերեն ստեղնաշար (11) հայկական սոֆթ (11) ստեղնաշար (10) սքրիփթ (14) վինդոուս (12) տեսանյութ (23)
Copyright ©2017 ThemeFuse. All Rights Reserved