L'introduzione del paradigma a oggetti nel linguaggio php ha di fatto reso questo linguaggio compatibile con le logiche di altri linguaggi che nascono già per funzionare secondo qs logica.
Inoltre ci permette di creare strutture molto complesse basate su "complessità" minori, ovvero gli oggetti di cui è composta e soprattutto di rendere scalabili le nostre applicazioni.
Intervenire con una implementazione su un codice procedurale ci costringe a modificare grandi quantità di codice e a volte ci accorgiamo che la struttura che abbiamo creato non è adatta a supportare le nuove funzionalità che vorremmo aggiungere senza ricorrere ad antieconomiche modifiche.
L'uso degli oggetti semplifica molto il lavoro di un programmatore, poichè creando "micro entità autosufficienti" poste in relazione tra loro è intuitivo pensare che l'implementazione possa avvenire o creando nuove entità o evolvendone una già esistente o perchè no, entrambe.
Ma c'è un'altro importante vantaggio che ci consente questo paradigma ed è quello di garantire la scalabilità di un'applicazione, a patto di costruirla rispettando schemi logici o pattern, MVC è uno di questi.
Chi si trova ad affrontare le prime volte questa logica di sviluppo può lecitamente pensarla come un inutile aggiunta di files e cartelle in un "meccanismo" che potrebbe funzionare altrettanto bene seguendo altre strade. Vero, infatti i primi esempi e tutorial vengono fatti usando la massima semplicità, un "hello world" rende molto bene l'idea di come funziona questo schema, purtroppo per l'estrema semplicità non ne evidenzia i vantaggi e le peculiarità. Fidatevi che ci sono.
MVC non è esclusiva di Joomla!, altri framework quali Zend usano questo schema, perchè il suo scopo è quello di fornire uno "standard" attorno al quale sviluppare applicazioni dove la logica è completamente separata dalla visualizzazione. In parole povere il php da una parte e l'html o altri markup da un'altra, per riunirsi al momento della costrizione della pagina per la visualizzazione.
Vediamo questo schema,... dicevamo MVC, ovvero model-view-controller, senza inglesismi modello-visualizzazione-controller.
Chi fa cosa?
Il MODELLO: è la logica dell'applicazione e si occupa di interagire con il database, di fornire "elaborazioni" di dati attraverso i suoi metodi,... insomma è un po' il motore,
la VISUALIZZAZIONE è ciò che l'utente vedrà, quindi il codice per la visualizzazione della pagina, in genere l'html,
il CONTROLLER è colui che consente di unire il modello e la visualizzazione, rispondendo ad eventi previsti e quindi gestiti.
In pratica il controller si occupa di soddifare la richiesta proveniente dall'http utilizzando i metodi creati nel model e generando dati che verranno presi in carico dalla view per la visualizzazione.. semplice no?
Le eventuali altre cartelle e files presenti svolgono solamente funzioni di supporto, ci può essere dunque una cartella per gli script js o ajax, una per le immagini una per una nostra classe di appoggio e così via.
Dicevamo che serve a separare la logica dalla visualizzazione, vediamo come.
Immaginiamo di dover recuperare una lista di nomi.
Con un codice procedurale e non tenendo conto del MVC faremmo semplicemente cosi:
listanomi.php
-> connessione db
-> query db
-> while($row = mysql_fetch_object($result)
-> show diretto dei risultati: <p> echo del dato</p>
Con MVC dovremo mettere il codice giusto al posto giusto, ovvero:
nel modello:
-> connessione db
-> query db
-> funzione che ritorna i dati (array)
nel controller:
-> chiamo la funzione del model per ottenere i dati
-> uso una funzione predefinita per chiamare il display del template mettendo a disposizione i dati recuperati
nella view:
<p> echo del dato</p>
Questo è quello che avviene generalmente in uno schema MVC, cosa cambia in Joomla?
Nulla, o quasi, ma tutto in meglio.
All'interno del framework Joomla la prima classe che viene istanziata è l'applicazione. Questo ci mette a disposizione metodi che ci semplificheranno notevolmente la scrittura del codice, es. quello che sopra ho scritto:
-> connessione db
-> query db
-> while($row = mysql_fetch_object($result)
in realtà richiederebbe qualche riga di codice in più per funzionare, quelle monotone ripetizioni di codice che dobbiamo necessariamente scrivere tutte le volte.
Joomla ci semplifica la vita avendo già a disposizione semplici funzioni (metodi della/e classe) che lo fanno per noi, riducendo la quantità di codice necessario alla scrittura a quello che ho citato io nell'esempio, infatti diventerebbe:
-> $db =& JFactory::getDBO(); (creo un'istanza dell'oggetto database che mi consente di accederne alle proprietà e di usarne i metodi contenuti nelle classi)
-> $query = 'SELECT * FROM #__nome_tabella'; (preparo la query)
-> $result = $db->setQuery($query); (la eseguo)
-> $dati = $db->loadResult(); (estraggo i dati e li metto a disposizione del controller e quindi della view)
Vabbè dai, io avevo scritto tre righe e ne sono uscite quattro... ma vi siete resi conto dei vantaggi?
M.