Kanuni ya MVC katika utayarishaji wa wavuti. Wacha turudi kwenye utekelezaji wa MVC. Sheria za jumla za kuchagua muundo

Watu wengi huanza kuandika mradi wa kufanya kazi na kazi moja, haimaanishi kwamba inaweza kukua katika mfumo wa usimamizi wa watumiaji wengi, kwa mfano, maudhui au, Hasha, uzalishaji. Na kila kitu kinaonekana kuwa kizuri na kizuri, kila kitu kinafanya kazi, hadi unapoanza kuelewa kuwa msimbo ulioandikwa unajumuisha magongo na kanuni ngumu. Nambari hiyo imechanganywa na mpangilio, maswali na vigongo, wakati mwingine hata haisomeki. Shida kubwa inatokea: unapoongeza vipengee vipya, lazima uangalie nambari hii kwa muda mrefu sana, ukikumbuka "ni nini kiliandikwa hapo?" na kujilaani huko nyuma.

Huenda hata umesikia kuhusu miundo ya kubuni na hata kupitia vitabu hivi vya ajabu:

  • E. Gamma, R. Helm, R. Johnson, J. Vlissides “Mbinu za Malengo muundo ulioelekezwa. Miundo ya Kubuni";
  • M. Fowler "Usanifu wa Programu za Biashara za Biashara."
Na wengi, bila kuogopa na miongozo mikubwa na nyaraka, walijaribu kusoma mifumo yoyote ya kisasa na, wanakabiliwa na ugumu wa uelewa (kwa sababu ya uwepo wa dhana nyingi za usanifu zilizounganishwa kwa ujanja), waliacha kusoma na kutumia. zana za kisasa "kwenye burner ya nyuma."

Makala hii itakuwa muhimu hasa kwa Kompyuta. Kwa hali yoyote, natumai kuwa katika masaa machache utaweza kupata wazo la utekelezaji wa muundo wa MVC, ambayo ni msingi wa mifumo yote ya kisasa ya wavuti, na pia kupata "chakula" kwa kutafakari zaidi juu ya "jinsi ya fanya." Mwishoni mwa kifungu kuna uteuzi viungo muhimu, ambayo pia itakusaidia kuelewa mifumo ya wavuti inajumuisha (kando na MVC) na jinsi inavyofanya kazi.

Watengenezaji wa programu za PHP walio na msimu hawawezi kupata chochote kipya kwao wenyewe katika nakala hii, lakini maoni na maoni yao juu ya maandishi kuu yangesaidia sana! Kwa sababu Bila nadharia, mazoezi haiwezekani, na bila mazoezi, nadharia haina maana, basi kwanza kutakuwa na nadharia kidogo, na kisha tutaendelea kufanya mazoezi. Ikiwa tayari unafahamu dhana ya MVC, unaweza kuruka sehemu ya nadharia na kwenda moja kwa moja kwenye mazoezi.

1. Nadharia Mchoro wa MVC unaelezea njia rahisi ya kuunda programu, ambayo madhumuni yake ni kutenganisha mantiki ya biashara kutoka kwa kiolesura cha mtumiaji. Matokeo yake, maombi ni rahisi kupima, kupima, kudumisha na, bila shaka, kutekeleza.

Wacha tuangalie mchoro wa dhana ya muundo wa MVC (kwa maoni yangu, huu ndio mchoro uliofanikiwa zaidi ambao nimeona):

Katika usanifu Mfano wa MVC hutoa data na sheria za mantiki ya biashara, mtazamo unawajibika kiolesura cha mtumiaji, na mtawala hutoa mwingiliano kati ya mfano na mtazamo.

Mtiririko wa kawaida wa programu ya MVC unaweza kuelezewa kama ifuatavyo:

  • Mtumiaji anapotembelea rasilimali ya wavuti, hati ya uanzishaji huunda mfano wa programu na kuizindua kwa utekelezaji.
    Hii inaonyesha mtazamo wa, tuseme, ukurasa kuu wa tovuti.
  • Programu hupokea ombi kutoka kwa mtumiaji na huamua mtawala na hatua iliyoombwa. Kwa upande wa ukurasa kuu, kitendo chaguo-msingi kinafanywa ( index).
  • Programu inasisitiza kidhibiti na inaendesha njia ya kitendo,
    ambayo, kwa mfano, ina simu za modeli zinazosoma habari kutoka kwa hifadhidata.
  • Baada ya hayo, hatua huunda mtazamo na data iliyopatikana kutoka kwa mfano na inaonyesha matokeo kwa mtumiaji.
  • Mfano - ina mantiki ya biashara ya maombi na inajumuisha mbinu za sampuli (hizi zinaweza kuwa njia za ORM), usindikaji (kwa mfano, sheria za uthibitishaji) na kutoa data maalum, ambayo mara nyingi hufanya kuwa nene sana, ambayo ni ya kawaida kabisa.
    Mfano haupaswi kuingiliana moja kwa moja na mtumiaji. Vigezo vyote vinavyohusiana na ombi la mtumiaji lazima vichakatwa kwenye kidhibiti.
    Muundo haufai kutoa HTML au msimbo mwingine wa kuonyesha ambao unaweza kubadilika kulingana na mahitaji ya mtumiaji. Nambari kama hiyo inapaswa kuchakatwa katika maoni.
    Mfano sawa, kwa mfano: mfano wa uthibitishaji wa mtumiaji unaweza kutumika katika sehemu zote za mtumiaji na za utawala za programu. Katika kesi hii, inaweza kuchukuliwa kanuni ya jumla katika darasa tofauti na kurithi kutoka kwayo, akifafanua njia maalum za maombi madogo katika vizazi vyake.

    Tazama - inayotumika kubainisha onyesho la nje la data iliyopokelewa kutoka kwa kidhibiti na modeli.
    Mionekano ina lebo ya HTML na vichochezi vidogo vya msimbo wa PHP ili kupitisha, umbizo na kuonyesha data.
    Haipaswi kufikia hifadhidata moja kwa moja. Hivi ndivyo mifano inapaswa kufanya.
    Haipaswi kufanya kazi na data iliyopatikana kutoka kwa ombi la mtumiaji. Kazi hii lazima ifanywe na mtawala.
    Inaweza kufikia moja kwa moja sifa na mbinu za kidhibiti au miundo ili kupata data iliyo tayari kutoa.
    Mionekano kwa kawaida hugawanywa katika kiolezo cha kawaida, chenye alama za kawaida kwa kurasa zote (kwa mfano, kichwa na kijachini) na sehemu za kiolezo ambazo hutumika kuonyesha matokeo ya data kutoka kwa modeli au kuonyesha fomu za kuingiza data.

    Kidhibiti ni gundi inayounganisha mifano, maoni na vipengele vingine ndani maombi ya kazi. Kidhibiti kinawajibika kushughulikia maombi ya mtumiaji. Kidhibiti haipaswi kuwa na hoja za SQL. Ni bora kuwaweka katika mifano. Kidhibiti haipaswi kuwa na HTML au alama nyingine. Inafaa kuileta kwa mtazamo.
    Katika programu iliyoundwa vizuri ya MVC, vidhibiti kwa kawaida ni vyembamba sana na huwa na mistari michache tu ya msimbo. Sawa haiwezi kusemwa kuhusu Vidhibiti vya Mafuta vya Kijinga (SFC) katika CMS Joomla. Mantiki ya mtawala ni ya kawaida kabisa na nyingi huhamishiwa kwa madarasa ya msingi.
    Mifano, kinyume chake, ni nene sana na zina kanuni nyingi zinazohusiana na usindikaji wa data, kwa sababu muundo wa data na mantiki ya biashara iliyomo ndani yake kwa kawaida ni mahususi kwa programu mahususi.

    1.1. Kidhibiti cha Mbele na Kidhibiti cha Ukurasa Mara nyingi, mwingiliano wa mtumiaji na programu ya wavuti hutokea kwa kubofya viungo. Angalia sasa upau wa anwani wa kivinjari chako - ulipokea maandishi haya kutoka kwa kiungo hiki. Viungo vingine, kama vile vilivyo upande wa kulia wa ukurasa huu, vitakupa maudhui tofauti. Kwa hivyo, kiungo kinawakilisha amri maalum kwa programu ya wavuti.

    Natumai tayari umegundua kuwa tovuti tofauti zinaweza kuwa kamili miundo tofauti ujenzi upau wa anwani. Kila fomati inaweza kuonyesha usanifu wa programu ya wavuti. Ingawa hii sio wakati wote, katika hali nyingi ni ukweli wazi.

    Wacha tuchunguze chaguzi mbili za upau wa anwani, ambao unaonyesha maandishi na wasifu wa mtumiaji.

    Takriban msimbo wa usindikaji katika kesi hii:
    switch($_GET["action"]) ( kesi "kuhusu" : require_once("about.php"); // mapumziko ya ukurasa wa "Kuhusu Sisi"; kesi "contacts" : require_once("contacts.php"); // Uvunjaji wa ukurasa wa "Anwani"; kisa "maoni" : require_once("feedback.php"); // mapumziko ya ukurasa wa "Maoni"; chaguo-msingi: require_once("page404.php"); // ukurasa wa "404" mapumziko;)
    Nadhani karibu kila mtu amefanya hivi hapo awali.

    Kwa kutumia injini ya kuelekeza ya URL, unaweza kusanidi programu yako ili kukubali maombi kama haya ili kuonyesha taarifa sawa:
    http://www.example.com/contacts/feedback

    Hapa anwani zinawakilisha kidhibiti, na maoni ni njia ya kidhibiti cha anwani inayoonyesha fomu ya maoni, n.k. Tutarudi kwenye suala hili katika sehemu ya vitendo.

    Inafaa pia kujua kuwa vipanga njia vingi vya mifumo ya wavuti hukuruhusu kuunda njia maalum za URL (taja maana ya kila sehemu ya URL) na sheria za kuzichakata.
    Sasa tuna maarifa ya kutosha ya kinadharia ya kuendelea na mazoezi.

    2. Fanya mazoezi Kwanza, hebu tuunde muundo unaofuata faili na folda:


    Kuangalia mbele, nitasema kwamba madarasa ya msingi Model, View na Controller itahifadhiwa kwenye folda ya msingi.
    Watoto wao watahifadhiwa katika vidhibiti, miundo na saraka za kutazama. Faili ya index.php ndiyo sehemu ya kuingilia kwenye programu. Faili ya bootstrap.php inaanzisha upakiaji wa programu, kuunganisha modules zote muhimu, nk.

    Tutaenda kwa mfululizo; Hebu tufungue faili ya index.php na tuijaze na msimbo ufuatao:
    ini_set("makosa_ya_maonyesho", 1); inahitaji_mara moja "application/bootstrap.php";
    Hapapaswi kuwa na maswali yoyote.

    Ifuatayo, wacha tuende mara moja kwenye faili ya bootstrap.php:
    inahitaji_mara moja "core/model.php"; inahitaji_mara moja "msingi/view.php"; inahitaji_mara moja "core/controller.php"; inahitaji_mara moja "core/rout.php"; Njia ::anza (); // anza kipanga njia
    Mistari mitatu ya kwanza itajumuisha faili za kernel ambazo hazipo kwa sasa. Mistari ya mwisho unganisha faili na darasa la router na uzindue kwa utekelezaji kwa kupiga simu mbinu tuli kuanza.

    2.1. Utekelezaji wa Kipanga njia cha URL Kwa sasa, hebu tugeuke kutoka kwa utekelezaji wa muundo wa MVC na tuzingatie uelekezaji. Hatua ya kwanza tunayohitaji kufanya ni kuandika nambari ifuatayo katika .htaccess:
    RewriteEngine On RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule .* index.php [L]
    Nambari hii itaelekeza uchakataji wote wa ukurasa kwa index.php, ambayo ndiyo tunayohitaji. Unakumbuka sehemu ya kwanza tuliongelea Front Controller?!

    Tutaweka uelekezaji ndani faili tofauti route.php kwenye saraka ya msingi. Katika faili hii tutaelezea darasa la Njia, ambalo litaendesha mbinu za mtawala, ambazo zitazalisha mtazamo wa ukurasa.

    Yaliyomo kwenye faili ya route.php

    Njia ya darasa ( kazi tuli start() ( // kidhibiti na kitendo chaguo-msingi $controller_name = "Main"; $action_name = "index"; $routes = kulipuka("/", $_SERVER["REQUEST_URI"]); // pata jina la kidhibiti ikiwa (!tupu($routes)) ( $controller_name = $routes; ) // pata jina la kitendo ikiwa (!tupu($routes)) ( $action_name = $routes; ) // ongeza viambishi awali $model_name = " Model_".$controller_name; $controller_name = "Controller_".$controller_name; $action_name = "action_".$action_name; // kuunganisha faili na darasa la kielelezo (huenda kusiwe na faili ya kielelezo) $model_file = strtolower ($model_name). ".php"; $model_path = "application/models/".$model_file; if(file_exists($model_path)) ( jumuisha "application/models/".$model_file; ) // unganisha faili na darasa la kidhibiti $controller_file = strtolower ($controller_name) ) else ( /* itakuwa sahihi kutupa ubaguzi hapa, lakini ili kurahisisha mambo, tutaelekeza mara moja kwenye ukurasa wa 404 */ Route::ErrorPage404(); ) // kuunda kidhibiti $controller = new $controller_name ; $action = $action_name; if(method_exists($controller, $action)) ( // piga hatua ya kidhibiti $controller->$action(); ) vinginevyo ( // hapa itakuwa busara pia kutupa Njia ya ubaguzi::ErrorPage404(); ) ) kosa la kaziPage404( ) ( $host = "http://".$_SERVER["HTTP_HOST"]."/"; kichwa("HTTP/1.1 404 Haipatikani"); kichwa("Hali: 404 Haipatikani"); kichwa("Mahali:".$host."404"); ) )


    Ninagundua kuwa darasa hutumia mantiki iliyorahisishwa sana (licha ya nambari kubwa) na inaweza kuwa na shida za usalama. Hii ilifanyika kwa makusudi, kwa sababu ... kuandika darasa kamili la uelekezaji kunastahili angalau nakala tofauti. Hebu tuangalie mambo makuu...

    Katika kipengele safu ya kimataifa$_SERVER["REQUEST_URI"] ina anwani kamili ambayo mtumiaji aliwasiliana nayo.
    Kwa mfano: example.ru/contacts/feedback

    Kwa kutumia kipengele kulipuka Anwani imegawanywa katika vipengele. Matokeo yake, tunapata jina la mtawala, kwa mfano uliotolewa, hii ni mtawala wawasiliani na jina la kitendo, kwa upande wetu - maoni.

    Ifuatayo, faili ya mfano (mfano unaweza kukosa) na faili ya mtawala, ikiwa ipo, imeunganishwa na hatimaye, mfano wa mtawala huundwa na hatua inaitwa, tena, ikiwa ilielezwa katika darasa la mtawala.

    Kwa hivyo, unapoenda, kwa mfano, anwani:
    example.com/portfolio
    au
    example.com/portfolio/index
    Router itafanya vitendo vifuatavyo:

  • itajumuisha faili ya model_portfolio.php kutoka kwa folda ya mifano, iliyo na darasa la Model_Portfolio;
  • itajumuisha faili ya controller_portfolio.php kutoka kwa folda ya vidhibiti, iliyo na darasa la Controller_Portfolio;
  • itaunda mfano wa darasa la Controller_Portfolio na kupiga hatua ya chaguo-msingi - action_index, iliyoelezwa ndani yake.
  • Ikiwa mtumiaji anajaribu kufikia anwani ya kidhibiti ambacho hakipo, kwa mfano:
    example.com/ufo
    kisha ataelekezwa kwenye ukurasa wa "404":
    mfano.com/404
    Kitu kimoja kitatokea ikiwa mtumiaji atapata kitendo ambacho hakijaelezewa katika kidhibiti.2.2. Hebu turudi kwenye utekelezaji wa MVC Hebu tuende kwenye folda ya msingi na kuongeza faili tatu zaidi kwenye faili ya route.php: model.php, view.php na controller.php


    Acha nikukumbushe kuwa zitakuwa na madarasa ya msingi, ambayo sasa tutaanza kuandika.

    Yaliyomo kwenye faili ya model.php
    darasa Model ( kazi ya umma get_data() ( ) )
    Darasa la mfano lina mbinu tupu ya kuleta data, ambayo itabatilishwa katika aina za vizazi. Tunapounda madarasa ya kizazi kila kitu kitakuwa wazi zaidi.

    Yaliyomo kwenye faili ya view.php
    class View ( //public $template_view; // hapa unaweza kubainisha mwonekano chaguomsingi wa jumla. kazi tengeneza($content_view, $template_view, $data = null) ( /* if(is_array($data)) ( // badilisha safu vipengee katika vigeu dondoo($data); ) */ ni pamoja na "application/views/".$template_view; ) )
    Si vigumu nadhani kwamba mbinu kuzalisha iliyokusudiwa kuunda mtazamo. Vigezo vifuatavyo vinapitishwa kwake:

  • $ content_file - maoni yanayoonyesha maudhui ya ukurasa;
  • $template_file - template ya kawaida kwa kurasa zote;
  • $data ni safu iliyo na vipengele vya maudhui ya ukurasa. Kawaida kujazwa katika mfano.
  • Jumuisha chaguo za kukokotoa huunganisha kiolezo cha jumla (mwonekano) ambamo mwonekano utapachikwa
    ili kuonyesha maudhui ya ukurasa maalum.

    Kwa upande wetu, kiolezo cha jumla kitakuwa na kichwa, menyu, upau wa kando na kijachini, na yaliyomo kwenye kurasa yatakuwa ndani. fomu tofauti. Tena, hii inafanywa kwa urahisi.

    Yaliyomo kwenye faili ya controller.php
    class Controller ( public $model; public $view; function __construct() ( $this->view = new View(); ) function_index() ( ) )
    Njia kielezo_kitendo- hii ni hatua inayoitwa kwa chaguo-msingi; tutaibatilisha wakati wa kutekeleza madarasa ya kizazi.

    2.3. Utekelezaji wa madarasa ya kizazi Mfano na Kidhibiti, uundaji wa View "s Sasa furaha inaanza! Tovuti yetu ya kadi ya biashara itakuwa na kurasa zifuatazo:
  • nyumbani
  • Huduma
  • Kwingineko
  • Anwani
  • Na pia - ukurasa wa "404".
  • Kila ukurasa una kidhibiti chake kutoka kwa folda ya vidhibiti na mtazamo kutoka kwa folda ya maoni. Baadhi ya kurasa zinaweza kutumia kielelezo au vielelezo kutoka kwa folda za vielelezo.


    Katika takwimu iliyotangulia, faili template_view.php imeangaziwa kando - hii ni kiolezo kilicho na alama za kawaida kwa kurasa zote. Katika kesi rahisi zaidi, inaweza kuonekana kama hii:
    nyumbani
    Ili kuipa tovuti mwonekano mzuri, tunaunda kiolezo cha CSS na kukiunganisha kwenye tovuti yetu kwa kubadilisha muundo wa alama za HTML na Viunganisho vya CSS na faili za JavaScript:

    Mwishoni mwa kifungu, katika sehemu ya "Matokeo", kuna kiunga cha hazina ya GitHub na mradi ambao hatua zimechukuliwa ili kuunganisha kiolezo rahisi.

    2.3.1. Kuunda ukurasa mkuu Wacha tuanze na kidhibiti controller_main.php , hapa kuna msimbo wake:
    class Controller_Main huongeza Kidhibiti ( kazi action_index() ( $this->view->generate("main_view.php", "template_view.php"); ) )
    Katika mbinu kuzalisha mfano wa darasa la Tazama, majina ya faili za kiolezo cha jumla na mwonekano na yaliyomo kwenye ukurasa hupitishwa.
    Mbali na hatua ya faharisi, mtawala bila shaka anaweza kuwa na vitendo vingine.

    Tulikagua faili ya mwonekano wa jumla hapo awali. Zingatia faili ya maudhui main_view.php:
    Karibu!

    OLOLOSHA TEAM ni timu ya wataalamu wa daraja la kwanza katika uwanja wa ukuzaji tovuti wenye uzoefu wa miaka mingi katika kukusanya vinyago vya Mexico, sanamu za shaba na mawe kutoka India na Ceylon, picha za asili na sanamu zilizoundwa na mabwana wa Equatorial Africa karne tano au sita. iliyopita...


    Hii ina alama rahisi bila simu zozote za PHP.
    Ili kuonyesha ukurasa mkuu, unaweza kutumia mojawapo ya anwani zifuatazo:

    Tutazingatia mfano kwa kutumia mtazamo unaoonyesha data iliyopatikana kutoka kwa mfano hapa chini.

    2.3.2. Unda ukurasa wa "Portfolio" Kwa upande wetu, ukurasa wa "Portfolio" ndio ukurasa pekee unaotumia mfano.
    Mfano kawaida hujumuisha njia za sampuli za data, kwa mfano:
  • njia za maktaba za asili za pgsql au mysql;
  • njia za maktaba zinazotumia uondoaji wa data. Kwa mfano, mbinu za maktaba ya PEAR MDB2;
  • njia za ORM;
  • njia za kufanya kazi na NoSQL;
  • na nk.
  • Kwa urahisi, hatutatumia hoja za SQL au taarifa za ORM hapa. Badala yake, tutaiga data halisi na kurudisha mara moja safu ya matokeo.
    Weka faili ya kielelezo model_portfolio.php kwenye folda ya vielelezo. Hapa kuna yaliyomo:
    class Model_Portfolio inapanua Mfano ( chaguo la kukokotoa la umma get_data() ( safu ya urejeshaji("Mwaka" => "2012", "Site" => "http://DunkelBeer.ru", "Maelezo" => "Tovuti ya utangazaji ya bia ya giza ya Dunkel kutoka kwa mtengenezaji wa Ujerumani Löwenbraü inayozalishwa nchini Urusi na kampuni ya kutengeneza pombe "SUN InBev."), safu("Mwaka" => "2012", "Site" => "http://ZopoMobile.ru", "Maelezo " => "Katalogi ya lugha ya Kirusi Simu za Kichina Kampuni ya Zopo kulingana na Mfumo wa Uendeshaji wa Android na vifaa vyao."), // todo); ))

    Darasa la kidhibiti cha kielelezo liko katika faili ya controller_portfolio.php, hapa kuna msimbo wake:
    class Controller_Portfolio huongeza Kidhibiti ( kazi __construct() ( $this->model = new Model_Portfolio(); $this->view = new View(); ) function_index() ( $data = $this->model->get_data( ); $this->view->generate("portfolio_view.php", "template_view.php", $data); ) )
    Kwa kutofautiana data safu iliyorejeshwa na njia imeandikwa pata_data ambayo tuliangalia hapo awali.
    Tofauti hii basi hupitishwa kama kigezo cha njia kuzalisha, ambayo pia ina: jina la faili yenye template ya jumla na jina la faili iliyo na mtazamo na maudhui ya ukurasa.

    Mwonekano ulio na maudhui ya ukurasa uko kwenye faili ya portfolio_view.php.
    Kwingineko

    Miradi yote kwenye jedwali ifuatayo ni ya uwongo, kwa hivyo usijaribu hata kufuata viungo vilivyotolewa.
    MwakaMradiMaelezo


    Kila kitu ni rahisi hapa, mtazamo unaonyesha data iliyopatikana kutoka kwa mfano.

    2.3.3. Kuunda kurasa zilizobaki Kurasa zilizobaki zinaundwa kwa njia ile ile. Nambari yao inapatikana katika hazina ya GitHub, kiungo ambacho hutolewa mwishoni mwa makala, katika sehemu ya "Matokeo".3. Matokeo Haya ndiyo yaliyotokea mwishoni:

    Picha ya skrini ya tovuti ya kadi ya biashara inayotokana



    Kiungo cha GitHub: https://github.com/vitalyswipe/tinymvc/zipball/v0.1

    Lakini katika toleo hili nilichora madarasa yafuatayo (na aina zao zinazolingana):

    • Controller_Login ambayo mtazamo huzalishwa kwa fomu ya kuingia kuingia na nenosiri, baada ya kujaza ambayo utaratibu wa uthibitishaji unafanywa na, ikiwa imefanikiwa, mtumiaji anaelekezwa kwenye jopo la admin.
    • Contorller_Admin na kitendo cha faharasa ambacho hukagua ikiwa mtumiaji aliidhinishwa hapo awali kwenye tovuti kama msimamizi (ikiwa ni hivyo, mwonekano wa paneli ya msimamizi unaonyeshwa) na kitendo cha kuondoka kwa kuondoka.
    Uthibitishaji na uidhinishaji ni mada tofauti, kwa hivyo haijajadiliwa hapa, lakini ni kiunga kilichotolewa hapo juu tu ambacho kimetolewa ili uwe na kitu cha kuanzia.4. Hitimisho Mchoro wa MVC unatumika kama msingi wa usanifu katika mifumo mingi na CMS ambazo ziliundwa ili kuweza kukuza ubora wa juu. ufumbuzi tata katika muda mfupi zaidi. Hii iliwezekana kwa kuongeza kiwango cha uondoaji, kwani kuna kikomo cha ugumu wa miundo ambayo ubongo wa mwanadamu unaweza kufanya kazi nayo.

    Lakini, kutumia mifumo ya wavuti kama vile Yii au Kohana, inayojumuisha faili mia kadhaa, wakati wa kuunda programu rahisi za wavuti (kwa mfano, tovuti za kadi za biashara) haifai kila wakati. Sasa tunaweza kuunda mfano mzuri wa MVC ili tusichanganye Php, Html, CSS na JavaScript code katika faili moja.

    Nakala hii ni sehemu ya kuanzia ya kujifunza CMF kuliko mfano wa kitu sahihi ambacho unaweza kutumia kama msingi wa programu yako ya wavuti. Labda ilikuhimiza na tayari unafikiria kuandika muundo wako mdogo au CMS kulingana na MVC. Lakini, kabla ya kurejesha gurudumu linalofuata na "blackjack na makahaba," fikiria tena: labda itakuwa busara zaidi kuelekeza juhudi zako kwa maendeleo na kusaidia jamii ya mradi uliopo tayari?!

    P.S.: Nakala hiyo iliandikwa upya kwa kuzingatia maoni kadhaa yaliyoachwa kwenye maoni. Ukosoaji uligeuka kuwa muhimu sana. Kwa kuzingatia jibu: maoni, PM na idadi ya watumiaji walioongeza chapisho kwenye vipendwa, wazo la kuandika chapisho hili liligeuka kuwa sio mbaya sana. Kwa bahati mbaya, haiwezekani kuzingatia matakwa yote na kuandika zaidi na kwa undani zaidi kutokana na ukosefu wa muda ... lakini labda wale watu wa ajabu ambao walipunguza toleo la awali watafanya hivyo. Bahati nzuri na miradi yako!

    5. Uteuzi wa viungo muhimu juu ya mada Nakala mara nyingi inagusa mada ya mifumo ya wavuti - hii ni mada pana sana, kwa sababu hata miundo midogo ina sehemu nyingi zilizounganishwa kwa ujanja na itachukua zaidi ya nakala moja kuzungumza juu ya haya. vipengele. Hata hivyo, niliamua kuwasilisha hapa uteuzi mdogo wa viungo (ambavyo nilifuata wakati wa kuandika makala hii) ambayo kwa namna moja au nyingine yanahusiana na mada ya mifumo.

    Lebo: Ongeza vitambulisho

    Habari za mchana, wenzangu wapenzi. Katika makala hii ningependa kuzungumza juu ya uelewa wangu wa uchambuzi wa tofauti kati ya mifumo ya MVC, MVP na MVVM. Nilihamasishwa kuandika nakala hii kwa hamu ya kuelewa njia za kisasa za ukuzaji wa programu kubwa na zinazohusiana sifa za usanifu. Katika hatua ya sasa ya ngazi yangu ya kazi, mimi si msanidi wa moja kwa moja, hivyo makala inaweza kuwa na makosa, usahihi na kutokuelewana. Unavutiwa na jinsi wachambuzi wanaona kile waandaaji wa programu na wasanifu wanafanya? Kisha kuwakaribisha kwa paka.

    Viungo Jambo la kwanza ningependa kuanza nalo ni viungo vya vifaa vya nje, ambayo iliniongoza katika mchakato wa kuandika makala hii:
    Utangulizi Katika wakati ambapo jua lilikuwa linang'aa zaidi na nyasi kuwa kijani kibichi zaidi, timu ya wanafunzi kama vile mwandishi wa makala haya ilitengeneza programu kwa kuandika mamia ya mistari ya msimbo moja kwa moja kwenye kiolesura cha bidhaa. Wakati mwingine huduma na wasimamizi walitumiwa kufanya kazi na data, na kisha suluhisho lilipatikana kwa kutumia muundo wa Hati-Tazama. Kusaidia kanuni kama hizo kulihitaji gharama kubwa, kwa kuwa msanidi programu mpya alipaswa kufunzwa (kuambiwa) ni kanuni gani inayohusika na nini katika bidhaa, na hakukuwa na mazungumzo ya majaribio yoyote ya kitengo. Timu ya maendeleo ni watu 4 ambao hukaa katika chumba kimoja.
    Muda ulipita, kazi ilibadilika. Programu zinazoendelezwa zikawa kubwa na ngumu zaidi; kutoka kwa timu moja iliyounganishwa ya watengenezaji zikawa nyingi timu tofauti watengenezaji, wasanifu, wataalamu wa usability, wabunifu na PMs. Sasa kila mtu anajibika kwa eneo lake mwenyewe: GUI, mantiki ya biashara, vipengele. Idara ya uchambuzi, upimaji, na usanifu ilionekana. Gharama ya maendeleo ya programu imeongezeka mamia na hata maelfu ya nyakati. Mbinu hii ya ukuzaji inahitaji usanifu thabiti ambao unaweza kusawazisha maeneo tofauti ya utendaji ya bidhaa na kila mmoja.Miundo Kwa kuzingatia lengo la kupunguza gharama za wafanyikazi kwa kuunda programu ngumu, tunadhania kuwa ni muhimu kutumia suluhu zilizotengenezwa tayari. Baada ya yote, vitendo vya templated vinawezesha mawasiliano kati ya watengenezaji, kuruhusu kutaja miundo inayojulikana, na kupunguza idadi ya makosa.
    Kulingana na Wikipedia, muundo wa muundo ni muundo wa usanifu unaorudiwa ambao unawakilisha suluhisho la shida ya muundo ndani ya muktadha unaotokea mara kwa mara.

    Hebu tuanze na jambo kuu la kwanza - Model-View-Controller. MVC ni muundo msingi ambao umejikita katika teknolojia nyingi, kutokana na kuibuka kwa teknolojia mpya, na hurahisisha maisha kwa wasanidi programu kila siku.

    Kwanza Mchoro wa MVC ilionekana katika lugha ya SmallTalk. Watengenezaji walipaswa kuja na ufumbuzi wa usanifu, ambayo ingetuwezesha kutengana GUI kutoka kwa mantiki ya biashara, na mantiki ya biashara kutoka kwa data. Kwa hivyo, katika toleo lake la kawaida, MVC ina sehemu tatu, ambazo huipa jina lake. Hebu tuwaangalie:

    Kielelezo Kielelezo kawaida hueleweka kama sehemu iliyo na mantiki ya utendaji ya biashara ya programu. Mfano lazima uwe huru kabisa kutoka kwa bidhaa zingine. Safu ya mfano haihitaji kujua chochote kuhusu vipengele vya kubuni au jinsi itatolewa. Matokeo yanapatikana ambayo hukuruhusu kubadilisha uwasilishaji wa data, jinsi inavyoonyeshwa, bila kugusa Mfano yenyewe.

    Mfano una sifa zifuatazo:

    • Mfano ni mantiki ya biashara ya maombi;
    • Mfano huo una ujuzi kuhusu yenyewe na haujui kuhusu watawala na maoni;
    • Kwa baadhi ya miradi, mfano ni safu ya data tu (DAO, hifadhidata, faili ya XML);
    • Kwa miradi mingine, mfano ni meneja wa hifadhidata, seti ya vitu, au mantiki ya programu tu;
    Tazama Majukumu ya Mwonekano ni pamoja na kuonyesha data iliyopokelewa kutoka kwa Mfano. Walakini, mtazamo hauwezi kuathiri moja kwa moja mfano. Tunaweza kusema kwamba mtazamo una ufikiaji wa kusoma tu kwa data.

    Uwakilishi una sifa zifuatazo:

    • Mtazamo unatumia maonyesho ya data ambayo hupatikana kutoka kwa mfano kwa njia yoyote;
    • Katika baadhi ya matukio, mwonekano unaweza kuwa na msimbo unaotekeleza baadhi ya mantiki ya biashara.
    Mifano ya uwasilishaji: ukurasa wa HTML, fomu ya WPF, Fomu ya Windows. Tofauti kati ya MVP & MVVM & MVP Aina zinazojulikana zaidi za muundo wa MVC ni:
    • Kidhibiti-Mtazamo wa Mfano
    • Model-View-Presenter
    • Model-View-View Model

    Hebu fikiria na kulinganisha kila mmoja wao.

    Model-View-Presenter

    Mbinu hii hukuruhusu kuunda kifupisho cha uwakilishi. Ili kufanya hivyo, unahitaji kuchagua kiolesura cha kutazama na seti maalum ya mali na mbinu. Mwasilishaji, kwa upande wake, anapokea rejeleo la utekelezaji wa kiolesura, anajiandikisha kwa matukio ya uwasilishaji, na kurekebisha kielelezo kwa ombi.

    Ishara za mtangazaji:

    • Mtazamo huingiliana moja kwa moja na mtangazaji kwa kuita vitendaji au matukio yanayofaa kwenye mfano wa mtangazaji;
    • Mwasilishaji huingiliana na Mwonekano kwa kutumia kiolesura maalum kinachotekelezwa na Mwonekano;
    • Mfano mmoja wa mtangazaji unahusishwa na onyesho moja.

    Utekelezaji:
    Kila mtazamo lazima utekeleze kiolesura kinacholingana. Kiolesura cha mwonekano kinafafanua seti ya vitendakazi na matukio yanayohitajika ili kuingiliana na mtumiaji (kwa mfano, IView .ShowErrorMessage(string msg)). Mwasilishaji lazima awe na kumbukumbu ya utekelezaji wa interface inayofanana, ambayo kawaida hupitishwa katika mjenzi.
    Mantiki ya uwasilishaji lazima iwe na marejeleo ya mfano wa mwasilishaji. Matukio yote ya kutazama hupitishwa kwa mtangazaji kwa ajili ya kuchakatwa na karibu kamwe hayachakatwa na mantiki ya uwasilishaji (ikiwa ni pamoja na kuunda maoni mengine).

    Mfano wa matumizi: Fomu za Windows.

    Model-View-View Model

    Mbinu hii hukuruhusu kuhusisha vipengee vya kutazama na mali na matukio ya muundo wa Tazama. Inaweza kusema kuwa kila safu ya muundo huu haijui kuhusu kuwepo kwa safu nyingine.

    Vipengele vya muundo wa Tazama:

    • Mawasiliano ya njia mbili na uwasilishaji;
    • Mfano wa kutazama ni kifupi cha mtazamo. Kawaida inamaanisha kuwa sifa za mtazamo ni sawa na sifa za View/Model
    • Mtindo wa Tazama hauna marejeleo ya kiolesura cha kutazama (IView). Kubadilisha hali ya muundo wa Tazama hubadilisha mwonekano kiotomatiki na kinyume chake, kwani utaratibu wa kufunga data hutumiwa (Bindings)
    • Mfano mmoja wa muundo wa Tazama unahusishwa na mwonekano mmoja.

    Utekelezaji:
    Wakati wa kutumia muundo huu, mtazamo hautekelezi interface inayofanana (IView).
    Mwonekano lazima uwe na kiungo cha chanzo cha data (DataContex), ambacho katika kesi hii ni kielelezo cha Tazama. Vipengee vya kutazama vimefungwa kwa sifa na matukio yanayolingana ya kielelezo cha Tazama.
    Kwa upande wake, mfano wa Tazama unatumia kiolesura maalum ambacho kinatumika sasisho otomatiki vipengele vya uwasilishaji. Mfano wa kiolesura kama hicho katika WPF itakuwa INotifyPropertyChanged.

    Mfano wa matumizi: WPF

    Kidhibiti-Mtazamo wa Mfano
    Wazo kuu la muundo huu ni kwamba mtawala na mtazamo hutegemea mfano, lakini mfano hautegemei vipengele hivi viwili.

    Tabia za mtawala

    • Mdhibiti huamua ni mtazamo gani unapaswa kuonyeshwa kwa sasa;
    • Tazama matukio yanaweza tu kuathiri kidhibiti. Kidhibiti kinaweza kuathiri muundo na kufafanua mwonekano mwingine.
    • Maoni mengi yanawezekana kwa kidhibiti kimoja tu;

    Utekelezaji:
    Mtawala huzuia tukio kutoka nje na, kwa mujibu wa mantiki iliyoingia ndani yake, humenyuka kwa tukio hili kwa kubadilisha Mfano kwa kuita njia inayofaa. Baada ya mabadiliko, Mfano hutumia tukio ambalo limebadilika, na matukio yote ya Tazama yaliyojiandikisha kwa hili, baada ya kuipokea, rejea Mfano kwa data iliyosasishwa, baada ya hapo inaonyeshwa.

    Mfano wa matumizi: MVC ASP.NET

    Muhtasari Utekelezaji wa mifumo ya MVVM na MVP, kwa mtazamo wa kwanza, inaonekana rahisi sana na sawa. Walakini, kwa MVVM kufunga kwa mtazamo kwa Mtazamo wa mfano hufanywa kiatomati, lakini kwa MVP ni muhimu kupanga.
    MVC inaonekana kuwa na udhibiti zaidi juu ya mwonekano. Kanuni za jumla uteuzi wa muundo MVVM
    • Inatumika katika hali ambapo kuunganisha data kunawezekana bila hitaji la kuanzisha miingiliano maalum ya kutazama (yaani, hakuna haja ya kutekeleza IView);
    • Mfano wa kawaida ni teknolojia ya WPF.
    MVP
    • Inatumika katika hali ambapo kuunganisha data haiwezekani (Binding haiwezi kutumika);
    • Mfano wa kawaida ungekuwa kutumia Fomu za Windows.
    MVC
    • Inatumika katika hali ambapo mawasiliano kati ya mtazamo na sehemu nyingine za programu haiwezekani (na huwezi kutumia MVVM au MVP);
    • Kesi ya matumizi ya kawaida ni ASP.NET MVC.
    Hitimisho Kwa kumalizia, mwandishi wa makala hii angependa kusema kwamba kushikilia kabisa muundo mmoja sio chaguo bora kila wakati. Kwa mfano, fikiria kwamba ungependa kutumia MVVM kutengeneza programu nayo kutumia Windows Fomu kupitia mali ya udhibiti wa Bindings. Lengo lako ni kutenganisha wasilisho kutoka kwa mantiki ya biashara na mantiki inayowaunganisha. Maombi yanapaswa kuwa rahisi kupima na kuunga mkono, na kueleweka kwa wachambuzi (baada ya yote, swali "nini kinapimwa katika fanya kazi kwa bidii disk" kuna jibu moja tu sahihi - katika Joules (mfano wa abstract Models -> Maoni)).

    Asante sana kwa wakati wako, furahiya kusoma!

    MVC ni nini?

    Kwa hivyo, MVC ni kuhusu kiolesura cha mtumiaji (UI). Si lazima graphical, udhibiti wa sauti pia ni nzuri. Tusisahau kwamba programu haiwezi kuwa na kiolesura cha mtumiaji, lakini inaweza kuwa nayo kiolesura cha programu(API) au huna kabisa na bado ni muhimu.

    Lakini ikiwa tuna mtumiaji, basi lazima kuwe na kiolesura cha mtumiaji. Kiolesura ni nini? Huu ni mpaka unaoshikamana kati ya mifumo miwili. Kwa upande wetu: kwa upande mmoja - mpango, kwa upande mwingine - mtumiaji. Hawa hapa.

    Mpango huo ni wa kufikirika kabisa, msimbo wowote wa somo. Inaweza kufanya kitu muhimu, na mtumiaji ana mahitaji ambayo yanaweza kuridhika kwa msaada wa programu hii. Kisha vipande vya mantiki vinaonekana kwamba "kujua" jinsi, kwa kutumia programu hii, kufanya moja kwa moja kile ambacho mtumiaji anataka. Vipande si vya mantiki mahususi, mahususi ya somo katika programu. Zinafaa zaidi kwa mtumiaji na mahitaji yake maalum, na ni mchanganyiko wa simu na simu kwa programu.

    Tumia kesi

    Kwa mfano, fikiria terminal ya kufanya biashara kwa kubadilishana. Mtumiaji wa terminal anawasilisha maombi ambayo anaonyesha kwamba anataka kununua hisa 20 za kampuni ya Svetly Put kwa bei ya rubles 1,500 kwa kila hisa. Pia inaonyesha kwamba maombi ni halali kwa saa nne, na kutoka kwa akaunti gani fedha zitatolewa ikiwa shughuli hiyo itafanikiwa.

    Idadi inayoonekana ya sifa. Wakati fulani hupita, na anatambua kwamba hawezi kununua kwa bei hii na yuko tayari kuongeza bei kwa rubles 1,550, na kuacha maadili mengine yote. Kisha anachagua programu hii, bofya kitufe cha "hariri", kinaonyesha bei mpya, Ndiyo. Ni vizuri.

    Lakini kwenye ubadilishanaji huwezi kubadilisha agizo; katika eneo la somo hakuna wazo kama hilo. Ombi linaweza tu kuwasilishwa na kughairiwa. Ili kumpa mtumiaji fursa ya kubadilisha amri kwa click moja, unahitaji kukumbuka maadili ya zamani, kuondoa utaratibu, waache wahariri kile walichokumbuka, na uweke utaratibu mpya. Mchanganyiko kama huo. Lakini kwa mtumiaji inaonekana kama hatua moja rahisi: kubadilisha programu. Hii inaitwa kesi ya matumizi.

    Wacha tuongeze mchoro wetu na nafasi ya kesi za utumiaji.

    Mtumiaji pia anapaswa kupewa fursa ya kuvuta kesi hizi za utumiaji na kupata matokeo. Hizi zinaweza kuwa vitufe na vipengele vingine vya kielelezo vya ingizo/towe, ishara, utambuzi wa usemi na usanisi. Chaguo lolote la kubadilishana data na amri. Voila:

    Mtumiaji huchota moja ya kesi za utumiaji, ambazo, kwa upande wake, huendesha programu. Programu inachapisha matokeo au mabadiliko katika hali yake.

    Kwa hivyo MVC iko wapi?

    Kinachobaki ni kutoa majina yanayojulikana kwa vifaa vinavyotokana.

    Wakati mtindo unachapisha mabadiliko, haujali nani, haujui chochote kuhusu View. Badala ya au pamoja na View, kunaweza kuwa na mfumo mwingine mdogo kwa upande mwingine.

    Sasa maelezo machache.

    Ilikuwa toleo la classic MVC - Mfano Inayotumika. Pia hutokea kwamba mfano haujulishi kuhusu mabadiliko. Kisha mtawala huchukua jukumu hili. Anajua ni udanganyifu gani anafanya kwenye mfano, na, ni wazi, anajua ni mabadiliko gani katika hali ya mfano yanaweza kufuata. Hii ni Passive Model.

    Na wakati mmoja. Mgawanyo wa msimbo kuwa somo na usio wa somo ni wa masharti na unategemea jinsi tunavyotaka kuiga kielelezo eneo la somo. Wakati mwingine ni uamuzi wa busara kujumuisha aina fulani ya kesi ya utumiaji kwenye mfano. Labda hii itapunguza idadi ya nambari kwa jumla na kurahisisha.

    Tunamshukuru mteja wetu Stanislav Ilyichev kwa nyenzo

    Ndani ya chumba

      kipengele cha kinga- Watermark: mila na uvumbuzi

      kituo cha mkutano- Hii ni pesa ya kesho

      msimamo- Maonyesho ya kwanza na mitindo

      ujuzi- Ulinzi wa nyuso mbili

      ujuzi- Siri nzima iko kwenye lensi

      hati - Pasipoti ya Kanada: sanaa ya teknolojia

      maendeleo - Fiber za usalama: fursa mpya

      mihuri- Tiles, nikeli na mashairi ya Brodsky

      ishara za historia- Kadi za posta: njia kutoka kwa "telegramu ya posta" hadi bango la propaganda

      safari- Tamthilia za Kiarmenia: pesa zinaonyesha historia

    Rahisi kuangalia, ngumu kurudia

    KATIKA miaka iliyopita Goznak inakuza kikamilifu na kuuza teknolojia bora zaidi za kinga. Miongoni mwao, maelekezo mawili yanajitokeza: kuunda vipengele vinavyoonekana kwa mwanga, na vipengele vinavyopatikana kupitia mchanganyiko wa kukabiliana na metallografia.

    Leo, tasnia ya noti iko katika mahitaji makubwa kuliko hapo awali kwa suluhisho bora la kiteknolojia na usalama. Katika miaka ya hivi karibuni, Goznak amekuwa akilipa Tahadhari maalum maendeleo na uendelezaji kwenye soko la ufumbuzi huo, dhana ambayo inaweza kutengenezwa kama ifuatavyo: maendeleo ya vipengele vya usalama ambavyo ni rahisi kutambua, lakini vigumu kuzaliana, vilivyopatikana kwa kutumia vifaa vya kawaida. Tutaonyesha mkabala huu wa uundaji wa teknolojia bora za usalama kwa kutumia mfano wa uundaji wa pande mbili: kupata vipengele vinavyobadilika kwa macho vinavyoonekana kupitia uwasilishaji, na vipengele vinavyopatikana kupitia mchanganyiko wa uchapishaji wa kukabiliana na intaglio.

    Teknolojia zilizoangaziwa

    Alama ya maji, iliyoonekana kwenye karatasi kwenye mwanga unaopitishwa, inasalia kuwa kipengele cha usalama maarufu zaidi kati ya watu. Wakati huo huo, ni teknolojia ya juu, na uzoefu wa kuzalisha karatasi na watermarks ulianza zaidi ya karne saba. Ndiyo maana katika miaka ya hivi karibuni, kutokana na kuibuka kwa teknolojia mpya kwa ajili ya utengenezaji wa bidhaa za sare, kipengele hiki cha kinga kimepata maendeleo mapya. Alama za sauti nyingi katika takriban noti zote za kisasa zimetoa njia kwa alama za maji zilizopatikana kwa kuchanganya alama za toni nyingi na filigree. Na kwa sasa, teknolojia ya kupata watermarks kwa kutumia filigree tata ya ngazi nyingi inatekelezwa kikamilifu. Jarida la Watermark limezungumza mara kwa mara juu ya alama hizi. Teknolojia hii inafanya uwezekano wa kupata sio tu maeneo ya mwanga tofauti ya alama, lakini pia picha zilizo na mstari wa juu, atypical kwa watermarks.

    Nyuzi za usalama, kama alama za kudhibiti upitishaji, ni tofauti na za mwisho, sivyo historia ndefu- kidogo zaidi ya karne na nusu. Hata hivyo, wao ni imara imara juu ngazi ya juu teknolojia za kinga. Hii inatokana na uundaji mzuri wa karatasi yenye nyuzi za usalama na uwezo wao mpana wa kufanya kazi kama mtoa huduma wa vipengele na athari mbalimbali za usalama. Licha ya faida zinazoonekana kuwa zisizoweza kuepukika ikilinganishwa na watermarks, kuna kwa kiasi kikubwa zaidi bei ya juu Nyuzi za usalama zenyewe hupunguza ufanisi wa matumizi yao, haswa katika madhehebu ya chini, ambapo, kama sheria, chaguo rahisi zaidi na, ipasavyo, chaguzi za bei nafuu hutumiwa. Ndio maana moja ya mwelekeo katika ukuzaji wa nyuzi za usalama huko Goznak ilikuwa utengenezaji wa dirisha kubwa la uwazi kwenye karatasi kwa kuanzisha mkanda wa uwazi wa polima wakati wa utupaji wa karatasi, ikifuatiwa na utumiaji wa kiwango. teknolojia za uchapishaji kupata athari za kinga katika eneo la dirisha. Kwa kuwa filamu ya polima ambayo tepi hufanywa ni bidhaa inayozalishwa kwa wingi na haina vipengele vya kinga vya kipekee, gharama yake ni ya chini sana kuliko gharama ya nyuzi ambazo zina rangi-tofauti, za optically na vipengele vingine vya teknolojia ya juu. Wakati huo huo, vipengee vilivyo salama sana vya kubadilika kwa macho vinaweza kupatikana kwa kutumia teknolojia za uchapishaji za kitamaduni, ambazo hufanya hii. ufumbuzi wa kiufundi ufanisi zaidi.

    Hii ndio njia haswa ambayo ilitekelezwa katika noti ya ukumbusho ya Sochi 2014. Katika dirisha la uwazi, lililopatikana kwa kuanzisha mkanda wa polymer pana kwenye karatasi wakati wa wimbi la chini, kipengele cha ulinzi cha optically "Zebra" kinafanywa kwa kutumia njia ya metallographic. Unapotazamwa kwenye nuru na kuzungusha noti vizuri, unaweza kuona jinsi picha ya theluji kwenye dirisha inabadilika kutoka hasi hadi chanya.

    Je, ikiwa hutaanzisha mkanda wa polima ili kupata kipengele cha kutofautisha macho kinachodhibitiwa na upitishaji? Au, kwa njia nyingine, jinsi ya kupata macho kipengele cha kutofautiana, upitishaji-udhibiti, kwa kutumia teknolojia ya jadi ya noti? Hii ndiyo kazi hasa ambayo iliwekwa kwa wafanyakazi wa Kurugenzi teknolojia za kinga na wataalamu kutoka Taasisi ya Utafiti ya Goznak mnamo 2014. Kusudi ni dhahiri: kuondoa kipengee cha "ziada" - mkanda mpana wa polymer na teknolojia ngumu ya utangulizi wake kwenye karatasi, i.e. kutengeneza. suluhisho la usalama hata ufanisi zaidi.

    Kazi hiyo iligeuka kuwa ngumu sana, kwani, kwa upande mmoja, idadi kubwa ya sababu ziliathiri matokeo ya mwisho, na, kwa upande mwingine, sababu kuu ziligeuka kuwa sio tu zinazohusiana na kila mmoja, lakini pia. walipingana. Ilibidi niangalie suluhisho zisizo za kawaida. Mwishoni mwa 2014, baada ya kazi ya utafiti, uwezekano wa msingi wa kupata vipengele vile vya kinga ulithibitishwa. Mnamo mwaka wa 2015, FSUE Goznak ilitoa noti ya matangazo "Russian Avangard", iliyotolewa na naibu. mkurugenzi mkuu juu ya sayansi na maendeleo na A. B. Kuryatnikov katika toleo la pili la jarida la "Watermark" la 2015. Noti ya ofa ina kipengele cha usalama cha "Silhouette" - kipengele kinachobadilika kiotomatiki, kinachoonekana katika mwanga unaosambazwa na kutengenezwa kwa kutumia teknolojia za uchapishaji za noti za kitamaduni kwenye dirisha linalong'aa linalopatikana kwa kutumia teknolojia ya jadi ya utengenezaji wa karatasi. Hivi sasa, kazi inafanywa ili kuboresha teknolojia ya kupata dirisha la uwazi, na kuboresha muundo wa vitu vilivyochapishwa.

    Mchezo wa kete

    MVC, MVC+, HMC... Vifupisho hivi vya majina ya vipengele vya usalama vilivyotengenezwa katika FSUE Goznak vimeonekana mara kwa mara kwenye kurasa za gazeti tangu 2004. Na ikiwa unakusanya makala yote yaliyoandikwa juu ya mada hii, utapata hadithi nzima ya kuzaliwa, malezi na maendeleo ya mojawapo ya ufanisi zaidi, kwa maoni yetu, maeneo ya ulinzi. Upekee wa mwelekeo huu ni kwamba kuzalisha vipengele vya usalama, mchanganyiko hutumiwa kwa njia ya mistari iliyoratibiwa kijiometri iliyochapishwa na mbinu za uchapishaji za kukabiliana na intaglio.

    Kipengele cha usalama cha MVC Moire Variable Color ambacho kilionekana katika noti za kisasa za Benki ya Urusi kilikusudiwa hasa kwa ulinzi wa nakala. Hebu tukumbuke jinsi kipengele hicho kinavyofanya kazi: kwenye uwanja wa awali wa homogeneous, wakati noti imeinama, kupigwa kwa rangi ya moire huonekana. Athari hii ya kutofautisha macho haipo kwenye nakala, yaani, michirizi ya rangi ya moire haionekani, au hugunduliwa mara moja, na picha inabaki bila kubadilika bila kujali jinsi noti inavyoelekezwa au kuzungushwa. Uwezo wa kipengele hiki uligeuka kuwa wa juu zaidi kuliko ilivyotarajiwa awali kutokana na upinzani wake wa juu wa kuiga, manufacturability, upinzani wa kuvaa na uwezekano wa kisasa zaidi. Urahisi wa utekelezaji wake katika noti za safu ya kisasa ya jiji la 2004 na uigaji wa haraka unaotarajiwa na wataalamu wa Goznak katika suala hili ulilazimisha uboreshaji wa kisasa wa kipengele hiki cha usalama katika mwelekeo wa kuunda muundo wa moiré ambao ni ngumu zaidi kwa bandia kuzaliana. kwa matumizi ya muundo wa mstari usio na mstari na utumiaji wa mchanganyiko wa maandishi ya wino na uchapishaji wa intaglio wa rangi. Hivi ndivyo kizazi kijacho cha kipengele cha kutofautisha macho MVC+ kilivyoonekana. Kipengele hiki cha usalama kina maeneo mawili yaliyoratibiwa. Katika eneo la chini, muundo wa moire unaonekana kutoka kwa pembe yoyote, wakati katika eneo la juu, kama kwa MVC, inaonekana tu kwa pembe fulani. Ni muhimu sana kujua kwamba wakati noti imeinamishwa, muundo wa moire wa sehemu za juu na za chini unapaswa kuunda picha moja ya kuendelea bila kuhamisha mistari ya moire kwenye mpaka wa maeneo haya mawili. Kwa kuongeza, kipengele hiki cha kinga kinaimarishwa na kiwango cha fedha cha ulinzi. Unapotazama kipengele cha MVC+ chini ya mwanga wa UV, unaweza kuona athari sawa na ya mchana. Kipengele cha usalama cha MVC+ kinatumika katika noti za Benki Kuu ya Urusi katika madhehebu ya rubles 1000 na 5000, ya kisasa mwaka wa 2010.

    Sambamba na MVC+, uendelezaji ulifanyika kwa kipengele kipya cha kinga na kikubwa zaidi athari ya kuona. Na kufikia 2010, kipengele kipya cha usalama, HMC (Rangi Iliyofichwa) iliundwa, ambayo ikawa kipengele cha usalama zaidi katika mfululizo huu wa vipengele. Kwa sababu ya mabadiliko katika vigezo vya kijiometri vya mistari ya kukabiliana na metallografia wakati noti imeinamishwa, uwanja wa awali wa homogeneous umegawanywa katika vipande tofauti vilivyopakwa rangi tofauti. Nambari hutumiwa kama vipande vya rangi, wahusika wa maandishi, maumbo ya kijiometri, maeneo yoyote ya kiholela. Kawaida hakuna rangi zaidi ya 2-3 hutumiwa. Kipengele muhimu kipengele hiki cha kinga ni uwezekano hundi ya ziada uhalisi wake. Ikiwa unakumbuka rangi zinazoonekana wakati wa kuinua noti, na kisha kugeuza noti kwenye ndege yake digrii 180, unaweza kuona rangi tofauti kabisa za vipande. Athari hii inapatikana kwa shukrani kwa sura maalum ya mistari na matumizi ya vifaa vya kipekee kwa ajili ya utengenezaji wa fomu za metallographic. Kama kipengee cha MVC+, kipengele cha usalama cha HMC kina kiwango cha ziada cha uthibitishaji wa pesa taslimu: unapoangaziwa na mwanga wa UV, unaweza kuona athari zile zile zinazobadilika kiakili kama wakati wa mchana. Kipengele cha usalama cha HMC kilianzishwa katika eneo la usalama la Benki ya Urusi noti ya ruble 500 ya marekebisho ya 2010.

    Ili kupata vipengele vya kinga vya mfululizo wa MVC - HMC, mistari ya metallographic yenye kina cha kutosha cha misaada hutumiwa. Chini ya hali ya shinikizo la juu sana wakati wa uchapishaji wa intaglio, karatasi imeharibika, ikichukua sura ya wasifu wa mistari ya intaglio. Usaidizi unaosababishwa unaonekana kwenye pande zote za mbele na za nyuma za karatasi iliyochapishwa. Wakati usaidizi wa upande wa mbele "unafanya kazi" katika vipengele vya usalama vya mfululizo wa MVC - HMC, unafuu wa upande wa nyuma haukutumika hadi hivi majuzi. Wataalamu wa Goznak walipendekeza ufumbuzi wa kuvutia- uundaji wa vipengee vinavyobadilika kwa macho kwenye pande za mbele na nyuma za noti wakati wa uchapishaji wa intaglio kwenye upande wa mbele pekee. Sehemu kama hiyo ilitengenezwa na kutekelezwa kwenye noti ya matangazo "miaka 195 ya Goznak". Maelezo ya kina kipengele hiki, kiitwacho CHMC (Combined HMC), kimetolewa katika jarida la "Watermark" nambari 3 la 2013. Pamoja na kupata vipengele vinavyobadilika kwa macho pande zote mbili za noti kwa kutumia noti muhimu. vipengele vya teknolojia mashine ya uchapishaji ya offset - kuhakikisha usajili sahihi wa uchapishaji kwenye pande za mbele na nyuma; kipengele kimepatikana ili kudhibiti upatanishi wa pande za mbele na nyuma. Kwa hivyo, CHMC ni "tatu kwa moja", yaani vipengele vya macho kwenye pande zote mbili za noti na kipengele cha kudhibiti upangaji wa pande za mbele na za nyuma. Kipengele muhimu cha kipengele hiki ni kwamba MVC na HMC au mchanganyiko wa zote mbili zinaweza kupatikana kwa kujitegemea kwenye pande za mbele na za nyuma za noti. Kwa hivyo, kwenye noti ya matangazo "Avangard ya Kirusi" kipengele cha HMC kinatumika upande wa mbele, na mchanganyiko wa MVC na HMC hutumiwa upande wa nyuma.

    Ili kupata athari bora ya kuona wakati wa kuunda vipengele vya mfululizo wa MVC - HMC, hasa HMC, ni muhimu kutumia rangi mkali, tofauti wakati wa kuchapisha mistari ya kukabiliana. Kesi inayofaa ni kutumia rangi za CMY. Walakini, mara nyingi wakati wa kubadilisha noti za kisasa, mteja haruhusu kubadilisha rangi au kutumia rangi angavu kama hizo uchapishaji wa offset. Kwa hivyo, maelewano yanapaswa kufanywa kati ya muundo na athari ya kuona. Hii ni kweli hasa kwa kipengele cha HMC. Ni kwa noti kama hizo "ngumu" kwa suala la rangi ambapo vipengele vya HMC vya rangi mbili na hata vya rangi moja vilitengenezwa. Katika kesi hii, kipengele cha rangi moja ni rangi mbili rasmi, kwani nafasi, yaani, rangi ya karatasi, hutumiwa kama rangi ya pili. Kwa hivyo, wakati noti imeinamishwa, rangi haibadilika; picha nzuri au hasi inaonekana.

    Kwa kuongeza, vipengele vyovyote vya mfululizo wa MVC - HMC vinaweza kuongezewa na picha iliyofichwa au iliyofichwa.

    Kwa hivyo, leo mfululizo wa vipengele vya kinga vinavyobadilika vyema vinavyozalishwa na mchanganyiko wa kukabiliana na uchapishaji wa intaglio vimeundwa. Hii ni aina ya seti ya cubes ambayo inaweza kutumika kujenga tata ya kipekee ya usalama kwa noti mbalimbali.

    Uendelezaji wa vipengele vya kinga vya kutofautiana vya optically vya mfululizo wa MVC - HMC unaendelea. Kuna mawazo mapya. Na inawezekana kabisa kwamba utekelezaji mpya wa kipengele cha usalama kulingana na mchanganyiko wa kukabiliana na uchapishaji wa intaglio utaonekana hivi karibuni katika noti mpya ya utangazaji au bidhaa yoyote ya mzunguko.

    Kanuni ya MVC katika programu ya wavuti (Mfano - Tazama - Kidhibiti, Mfano - Tazama (Tazama) - Kidhibiti) ni mojawapo ya wengi zaidi. mawazo mazuri mpaka leo. Kanuni ya MVC ni angavu kwa mtazamo wa kwanza, lakini si rahisi sana inapochunguzwa. Kwanza tuangalie imekusudiwa nini.

    Kanuni ya MVC hukuruhusu kutenganisha utekelezaji wa mantiki ya maombi, mwonekano(kiolesura cha picha, GUI) na mwingiliano wa mtumiaji.

    Hili husababisha msimbo uliopangwa zaidi, huruhusu watu waliobobea zaidi kufanya kazi kwenye mradi, hurahisisha udumishaji wa msimbo, na kuufanya kuwa wenye mantiki zaidi na kueleweka. Mabadiliko katika sehemu moja yana athari ndogo kwa zingine. Inaweza kushikamana na mfano mmoja aina tofauti, vidhibiti tofauti.

    Kwa upande mwingine, hii inahitaji utendaji mkubwa wa mashine za utekelezaji, lakini hivi karibuni hili halijakuwa tatizo kubwa - ufumbuzi wa programu unaozidi kuwa ngumu unahitaji msaada, na gharama za usaidizi zitazidi gharama za vifaa vya kisasa vya nguvu zaidi.

    Kanuni ya MVC inatumiwa na karibu mifumo yote ya kisasa.

    Hebu tuangalie kwa karibu vipengele.

    Mfano- ina kinachojulikana "mantiki ya biashara" - usindikaji na uthibitishaji wa data, kupata hifadhidata, inawakilisha shirika la ndani mifumo. Mfano haupaswi kuingiliana moja kwa moja na mtumiaji.

    Tazama inaelezea mwonekano wa programu.

    Kidhibiti- kiungo cha kuunganisha kati ya mfano na mtazamo, hupokea data kutoka kwa mtumiaji, huihamisha kwa mfano, hupokea matokeo ya kusindika na kuihamisha kwa mtazamo.

    Uhusiano unaweza kuonekana kwenye mchoro:

    Chanzo cha picha: http://www.wikipedia.org Mahitaji ya kipengele:

    Miundo:

    • lazima iwe na sifa zinazowakilisha data maalum;
    • lazima ijumuishe mantiki ya biashara (kwa mfano, sheria za uthibitishaji) ili kuhakikisha kuwa data inakidhi mahitaji;
    • inaweza kuwa na msimbo wa kufanya kazi na data.
    Uwakilishi:
    • inapaswa kimsingi kuwa na alama kama vile HTML, na PHP rahisi msimbo unaotumika kupitisha, kufomati na kuonyesha data;
    • haipaswi kupata hifadhidata moja kwa moja. Hivi ndivyo mifano inapaswa kufanya;
    • haipaswi kufikia moja kwa moja $_GET , $_POST na vigeu vingine vilivyopatikana kutoka kwa ombi la mtumiaji. Kazi hii lazima ifanywe na mtawala. Mionekano inapaswa kutumika tu kufomati data iliyopokelewa kutoka kwa kidhibiti na modeli;
    • inaweza kufikia moja kwa moja mali na mbinu za mtawala au mifano. Walakini, hii inapaswa kufanywa tu kwa madhumuni ya kuonyesha data.
    Vidhibiti:
    • inaweza kufikia $_GET , $_POST na zingine Vigezo vya PHP, iliyopatikana kutoka kwa ombi la mtumiaji;
    • inaweza kuunda na kudhibiti mifano ya mifano. Kwa mfano, katika kitendo cha kusasisha kielelezo cha kawaida, kidhibiti kinaweza kwanza kuunda mfano wa modeli, kisha kuijaza na data kutoka $_POST na, ikiwa muundo umehifadhiwa kwa ufanisi, elekeza kivinjari cha mtumiaji kwenye ukurasa wa muundo iliyoundwa. Ni muhimu kuzingatia kwamba kuokoa mfano yenyewe inapaswa kutekelezwa katika darasa la mfano, si katika mtawala;
    • lazima isiwe na maswali ya SQL. Ni bora kuwaweka katika mifano;
    • lazima isiwe na HTML au alama zingine. Inafaa kuiweka katika uwasilishaji.
    (Mahitaji yamechukuliwa kutoka hapa: http://yiiframework.ru/doc/guide/ru/basics.best-practices)

    Mbali na dhana ya MVC, kuna wengine wengi, kwa mfano MOVE (Miundo, O perations, V iews na E vents) - aina kama mageuzi ya MVC (imechukuliwa kutoka hapa: http://habrahabr.ru/post/ 147038/), lakini dhana hizi si za kawaida.