Model-View-Controller arhitektūras principi (1. daļa)
Ar šo ierakstu vēlos aizsākt rakstu sēriju par dažādiem sistēmu veidošanas arhitektūras un dizaina šablonu principiem (design patterns), kas tiek izmantoti programmējot. Vispirms vēlētos pastāstīt par Model-View-Controller (MVC) arhitektūru, jo tās principi tiek izmantoti lielākajā daļā mūsdienu populārajos PHP ietvaros, piemēram, Zend Framework.
Ļoti bieži iesācēji, kas sāk programmēt PHP mēdz visu kodu rakstīt vienkopus, neatdalot tos pa slāņiem. Piemēram, apskatīsim pavisam vienkāršu PHP lapu, kas no datu bāzes nolasa produktu sarakstu un šos ierakstus attēlo tabulā.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Paraugs</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
$dbhost = 'localhost';
$dbuser = 'user';
$dbpass = 'psw';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
$dbname = 'databasename';
mysql_select_db($dbname);
$query = "SELECT * FROM product";
$result = mysql_query($query);
?>
<table>
<tr>
<th>produkts</th>
<?
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {?>
<tr><td><?=$row['productName']?></td></tr>
<? }?>
</body>
</html>
Ja mūsu web aplikācija ir ļoti elementāra, tad šāda pieeja varētu būt pieņemama un nebūtu vērts izmantot ko īpaši sarežģītāku, bet, ja veidojam netriviālu lapu, tad ir jāsāk domāt kādā veidā padarīt kodu strukturētāku, lai pēc tam uzturēšana un jaunas funkcionalitātes pievienošana nesagādātu problēmas nākotnē. Tā kā eksistē tā saucamā labā programmēšanas prakse, tad riteņa vairākkārtēja izgudrošana nevienam labumu nenes un tieši tāpēc apskatīsim, ko mums spēj dot Model-View-Controller arhitektūra.
Model-View-Controller ir plaši lietots programmatūras arhitektūras modelis, ko 80-tajos gados radīja Xerox PARC programmēšanas valodas Smalltalk-80 vajadzībām. MVC ir kļuvis arī par rekomendējamo modeli J2EE (Java 2 Platform, Enterprise Edition) platformai.
![]() |
| http://www.mikeshannon.com |
MVC ir konstrukcijas modelis, kas izstrādātājam “uzspiež” sadalīt aplikāciju trīs slāņos – ieejas datu saņemšana, to apstrāde, datu izvadīšana:
View – saskarne ko lietotājs redz un ar ko mijiedarbojas. Interneta aplikācijai tas būs HTML kods. Aplikācija var saturēt vairākas reprezentatīvās daļas. View daļā nenotiek nekāda apstrāde – tas kalpo tikai, kā veids datu izvadīšanai. Biežākā kļūda, kas tiek pieļauta, ka View slānī tiek vēl veikti kādi aprēķini vai pat veikta vēršanās pie datu bāzes slāņa.
Model – sastāv no biznesa loģikas un datu atlases no datu bāzes. Dati, kas tiek atgriezti netiek formatēti. Šādi viens modelis var nodrošināt datus jebkuram skaitam View saskarnēm. Labums no tā ir tāds, ka tiek samazināta koda dublēšanās.
Controller - interpretē lietotāja pieprasījumus (piemēram, kad tiek sūtīta HTML forma, atvērta kāda hipersaite u.tml.) un izsauc vajadzīgās Model un View daļas. Controller daļa pati neko neattēlo un neveic reālu datu apstrādi. Controller saņem lietotāja pieprasījumu un pēc tā nosaka kuru Model komponentu un kuru View datu formatējumu piekārtot. Controller daļa ir aplikācijas “sirds”, kuras galvenais uzdevums ir deleģēt uzdevumus.
Kapēc lietot MVC?
Lielākā daļa interneta aplikāciju ir veidotas procedurālas (procedural) valodās, tādās kā php, asp. Kārdinājums vienmēr ir sajaukt datu slāņa kodu (piemēram, datu atlases SQL pieprasījumi) ar HTML reprezentāciju u.c. slāņiem. MVC spēks slēpjas arī tajā, ka viena konkrēta Model modulim, var būt vairākas View daļas, no kurām var izvēlēties vajadzīgo katrā konkrētā situācijā. Ar MVC nav svarīgi vai lietotājs grib Flash vai Wap lapas interfeisu – viens un tas pats Model spēs atbalstīt vairākus View versijas. Koda atkārtošanās ir ierobežota, jo tiek atdalīti dati un biznesa loģika no attēlošanas. Tas ir iespējams, jo modelis atgriež tikai datus, piemēram, pārsvarā dati tiek formatēti ar HTML, bet tie var tikt arī formatēti ar Flash vai WAP saskarni.
Paša MVC modeļa realizācija ir programmētāja ziņā. Nav viena noteikta standarta, kā tas tieši būtu jārealizē. Visbiežāk jau katrs MVC modelis tiek realizēts vadoties pēc konkrētām vajadzībām pret to.
Raksta 2. daļā tiks apskatīts kā iepriekšējo kodu būtu iespējams atdalīt pa slāņiem izmantojot kādu no PHP ietvariem.




