browser lang:en
Cosa è MVC?
Model View Controller è un modello di architettura software, che è ampiamente utilizzato in applicazioni Web, suddivise in tre strati (modello, vista e controller)
* Il Modello è responsabile di interagire con il database ed esegue regole di negoziazione.
* Il Controller processa le richieste della pagina web (la vista), e invia i dati al Modello, in modo tale che questi restituisca le informazioni appropriate per la visualizzazione in Vista.
* La Vista è il codice HTML che viene visualizzato per l'utente con informazioni da parte del controller.
Vantaggi di utilizzo.
Facilità di manutenzione del codice, in futuro, già che hanno il vantaggio di avere i diversi processi separati, a seconda della loro tipologia.
Se si desidera ad esempio cambiare il tipo di database, è necessario solo cambiare il codice di Modello.
Per una migliore comprensione delle architetture, mostro la trasformazione di un elenco di articoli di un blog.
Questo è il codice PROCEDURALE che elenca gli oggetti (ossia il codice che solitamente usiamo in PHP)
<?
// connessione alla base di dati
$cn = mysql_connect('localhost', 'utente', 'password');
mysql_select_db('db', $cn);
// consultiamo SQL per ottenere gli articoli
$risultato=mysql_query('SELECT data, titolo FROM articolo', $cn);
?>
<h1>Listato di articoli</h1>
<table>
<tr> <th>Data</th> <th>Titolo</th> </tr>
<?php
// stampa il risultato
while ($riga = mysql_fetch_array($risultato, MYSQL_ASSOC))
{
echo "<tr>";
echo "<td> ".$riga['data']." </td>";
echo "<td> ".$riga['titolo']." </td>";
echo "</tr>";
}
?>
</table>
<?php
//chiudiamo la connessione
mysql_close($cn);
?>
Commenti
* Sulla stessa pagina ci si connette al server (funziona solo se MySQL) e selezioniamo un database.
* Realizziamo una richiesta (nessun errore di manipolazione e / o eccezioni).
* Disegnamo il codice HTML (combiniamo il codice HTML con i codici di PHP all'interno, lasciando i tag (<tr>, <td>) illeggibili per la persona che inserisce gli stili).
Dividere in due file
L'esempio di cui sopra, lo possiamo separare in due file, uno chiamato Controller e l'altro Vista.
Controller.php
<?
$cn = mysql_connect('localhost', 'utente', 'password');
mysql_select_db('db', $cn);
$risultato = mysql_query('SELECT data, titolo FROM articolo', $cn);
$articoli = array();
while($articolo = mysql_fetch_assoc($risultato))
{
$articoli[] = $articolo;
}
mysql_close();
require('vista.php');
?>
<h1>Listato di Articoli</h1>
<table>
<tr> <th>Data</th> <th>Titolo</th> </tr>
<?php foreach($articoli as $articolo): ?>
<tr>
<td><?php echo $articolo['Data']?></td>
<td><?php echo $articolo['titolo']?></td>
</tr>
<?php endforeach;?>
</table>
In questo modo abbiamo separato nel Controller.php la maggior parte del codice php con la logica di negozio, mentre in Vista.php inseriamo solo un array con i dati.
La cosa migliore sarebbe usare le istruzioni PHP più comuni in Vista, come if, endif, foreach, endforeach. E di non utilizzare le parentesi "{" che rimangono difficili da riconoscere all'inizio e alla fine.
Un altro grave problema è se vogliamo utilizzare di nuovo il listato in un'altra pagina, ci sarebbe di riscrivere il Controller.php.
Per questo suddivideremo il Controller che (controlador.php) in Modello.php e Controller.php.
Modello.php
<?php
function getArticoli()
{
$cn = mysql_connect('localhost', 'utente', 'password');
mysql_select_db('db', $cn);
$risultato = mysql_query('SELECT data, titolo FROM articolo', $cn);
$articoli = array();
while($articolo = mysql_fetch_assoc($risultato))
{
$articoli[] = $articolo;
}
mysql_close();
}
?>
require('modello.php');
$articoli = getArticoli();
require('vista.php');
function creareConnessione($server, $utente, $password)
{
return mysql_connect($server, $utente, $password);
}
function chiudereConnessione($cn)
{
mysql_close($cn);
}
function consulta($consulta, $base_dati, $cn)
{
mysql_select_db($base_dati, $cn);
return mysql_query($consulta, $cn);
}
function getRisultato($risultato, $tipo = MYSQL_ASSOC)
{
return mysql_fetch_array($risultato, $tipo);
}
Accesso ai dati
function getTuttiGliArticoli()
{
$cn = creareConnessione('localhost', 'utente', 'password');
$risultato=consulta('SELECT data, titolo FROM articolo', 'db', $cn);
$articoli = array();
while ($articolo = getRisultato($risultato))
{
$articoli[] = $articolo;
}
chiudereConnessione($cn);
return $articoli;
}
Abbiamo ora il livello di accesso ai dati senza alcuna dipendenza di funzioni di gestione di database, e saremo in grado di riutilizzare le funzioni nel database abstraction layer di accesso ai dati in altre caratteristiche del nostro Modello.
Artweaver è un programma di disegno dotato di un'infinità di pennelli con cui sperimentare nuove tecniche grafiche.…
in:Software Open Source (0 commenti)Con Bind, la configurazione di domini e sottodomini è abbastanza semplice....l'elemento più importante è il cosidetto zone-file, che…
in:Apache (0 commenti)hkit é un tool, o meglio, una classe in PHP5 per la estrazione dei piú comuni microformati. La pagina…
in:PHP Scripts (0 commenti)Dopo circa un anno ho ritirato i certificati che attestano i miei corsi di Java...purtroppo manca il terzo…
in:Blog (3 commenti)SVNWeaver é una estensione per Dreamweaver che permette di integrare il TortoiseSVN nei menú del Dreamweaver. Devo dire…
in:Applicazioni di sviluppo web (0 commenti)Questo è un widget di jQuery per il nuovo social network di Google-Buzz-che è possibile incorporare ovunque per…
in:Scripts e tutorials (0 commenti)Questa é la classica situazione in cui si deve postare codice HTML da mostrare agli utenti. In questo…
in:HolyFaqs (0 commenti)Nella rete possiamo trovare diversi script che ci spiegano come estrapolare immagini da un database mysql (ed anche…
in:PHP Scripts (0 commenti)
