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.
Per i piú smemorati, una lista di comandi principali usati con linux cd : cambia la directory corrente. ls : mostra il…
in:Scripts e tutorials (0 commenti)Con l'avvento di caffeine molti webmaster si sono trovati a dover rivedere tutte le strategie SEO per i…
in:Scripts e tutorials (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)Questo é un pratico codificatore/decodificatore/decriptatore (chiamatelo come volete) di password inserite nei file di configurazione .ste su dreamweaver function…
in:Scripts e tutorials (0 commenti)Il PageRank è un algoritmo che usa Google per valutare la credibilità e l'autorevolezza delle pagine Web. Il…
in:Scripts e tutorials (8 commenti)Con questo script possiamo limitare il download di un file dal nostro server php; il limite di velocitá…
in:Scripts e tutorials (0 commenti)Alcuni host hanno disabilitati nei settaggi del.ini i comandi allow_url_fopen. Questo significa anche non poter usare i vantaggi…
in:Scripts e tutorials (2 commenti)Gli SHORT URLS fanno ormai parte di quelle cose di internet che ci suonono terribilmente familiari; per capirci…
in:Scripts e tutorials (0 commenti)
