Sull’uso dell’MVC Pattern (con PHP)
Lunedì 18 Maggio 2009 - 08:25
di Riccardo Degni

Tra i tanti Design Patterns disponibili, l’MVC è sicuramente quello che ha avuto più popolarità.
Per chi non ha familiarità con questo concetto, ecco la descrizione direttamente da Wikipedia:
Il pattern è basato sulla separazione dei compiti fra i componenti software che interpretano tre ruoli principali:
- il model fornisce i metodi per accedere ai dati utili all’applicazione;
- il view visualizza i dati contenuti nel model e si occupa dell’interazione con utenti e agenti;
- il controller riceve i comandi dell’utente (in genere attraverso il view) e li attua modificando lo stato degli altri due componenti
Questo schema, fra l’altro, implica anche la tradizionale separazione fra la logica applicativa (in questo contesto spesso chiamata “logica di business”), a carico del controller e del model, e l’interfaccia utente a carico del view.
Ora mi rivolgo a tutti gli sviluppatori (in particolare a quelli che si avvalgono di PHP, con la presenza o meno di Zend Framework): secondo voi questa metodologia di programmazione porta molti benefici nello sviluppo di un’applicazione web rispetto alle normali procedure di sviluppo?
A mio avviso sì, e parecchie. Io non implemento la versione “ufficiale” del Pattern MVC nelle mie applicazioni, ma una controparte da me personalizzata e adattata ai miei stili di programmazione (dopotutto, un Pattern pone una metodologia/soluzione, che può essere modificata a seconda dei casi). Devo dire che la separazione delle tre logiche porta ad una mantenibilità e ad una modularità davvero maggiore, favorendo una migliore gestione complessiva dell’applicazione.
Oltre al precedente quesito, vi chiedo inoltre: voi fate uso dei molti Design Patterns (in caso positivo, quali) nelle vostre applicazioni? Trovate che lo studio e l’apprendimento dei Design Patterns costiutuisca un valido motivo per produrre software o applicazioni maggiormente incentrati sulla nuova generazione (indipendentemente da linguaggio utilizzato)?
Categoria: PHP e Open Source | Permalink
Commenti
1
io mi trovo ad usare più o meno i soliti, oltre mvc ovviamente, adapter, factory, singleton, facade… più o meno questi. Certo che sono utili, in taluni casi indispensabili per avere uno sviluppo ordinato. A questo punto mi interesserebbe sapere le tue personali modifiche a MVC ehehe, se si può ovviamente. Magari si potrebbe farci un articolo?
# - postato da flux - 18 Maggio 2009 - 09:04
2
Se implementato coerentemente penso che può davvero aiutare ad organizzare meglio un’applicazione.
E’ un pò ostico da comprendere se si viene da un tipo di uso del php all’antica.. dove si facevano le query con mysql_query() e si dividevano le pagine con gli includes.
Ora che utilizzo symfony quando ripenso al vecchio modo mi sembra che ci sia una differenza di anni luce, ed invece sono passati solo pochi anni!
Un’altro concetto interessante è quello espresso da Django, che implementa il pattern MVC ma in un modo leggermente diverso e rinominandolo MVT, Model View Template, ossia facendo divenire il classico Controller in View e la classica view in Template. A mio avviso funziona e l’applicazione è più facile da capire.. Anche se ancora non ho cominciato ad utilizzare Django intensivamente e quindi non posso dirlo con certezza.
# - postato da Federico Capoano - 18 Maggio 2009 - 09:30
3
Mmmm l’MTV di django non mi sembra che cambi di una virgola rispetto al classico MVC
semmai bisognerebbe guardare quali di questi framework implementano una logica push e quali pull e magari fare una serie di casi in cui sia meglio l’uno o l’altro.
tipo questo blog o html.it potrebbe farlo :D# - postato da Marco - 18 Maggio 2009 - 09:41
4
Uso cakephp quindi MVC, non l’ho mai personalizzato per il semplice fatto che non ne ho la necessità e non voglio complicarmi la vita :)
5
Sto sperimentando da pochissimo l’MVC, questo perchè ho iniziato a sviluppare per Joomla. Ho le stesse sensazioni di quando iniziai a usare gli oggetti in php: mi appariva un modo di programmare labirintico, fatto di scatole cinesi.. :)
In realtà è molto utile per progetti complessi, con codice che va sviluppato e mantenuto nel tempo, in cui magari si lavora in team.# - postato da Andrea - 18 Maggio 2009 - 10:33
6
A onor di correttezza, l’MVT di Django non delega il Controller alla View. Sulla stessa documentazione si può leggere come in Django il View abbia la funzione di decidere “quali” contenuti mostrare, mentre è il framework stesso che funge da Controller.
# - postato da zimok - 18 Maggio 2009 - 12:44
7
Lo sviluppo è più semplice. Ci si rimette in esecuzione però..
Basta guardare Magento, basato su un framework specifico (a sua volta basato sullo Zend!)… è di una lentezza esasperante.
PHP è lento di suo, se gli andiamo a mettere dei livelli pure per fare query ad un DB…
# - postato da Francesco - 18 Maggio 2009 - 13:12
8
I patterns sono soluzione ripetibili a problemi che comunemente si verificano nella progettazione del software. L’aspetto davvero utile, oltre a quelli di qualità, scalabiltà ecc.., è che risulta molto semplice capire come è strutturata un’applicazione se questa è stata sviluppata con i pattern di design. A mio avviso qualsiasi progetto (la dimensione non dovrebbe essere un fattore determinante sul suo uso o meno) dovrebbe far uso dei patterns de desing, anche perché sono soluzioni ottimali a comuni problemi che lo sviluppatore si trova davanti. Se vogliamo uno standard, accettato dalla comunità, per problemi comuni di progettazione.
9
personalmente mi sono avvicinato all’mvc grazie a codeigniter prima e a kohanaphp poi, ormai non ne posso più fare a meno.
# - postato da coppermine - 19 Maggio 2009 - 00:35
10
Assolutamente d’accordo con egenio, io uso un framework anche per progetti piccolissimi.
Quella della lentezza è una scusa ridicola (da quando php è lento?) risolvibile facilmente con la cache (il framework che uso la implementa già di suo).
11
ciao,
se per problemi di performance vi consiglio di vedere 2 mvc molto allettanti per php: yii e limonade.Il primo è un mvc molto veloce e strutturato bene.
Il secondo è un microframework per collegare velocemente route con funzioni php (alla sinatra di ruby per intenderci).Cmq non sempre l’mvc è la soluzione migliore. Certe volte per questioni di performance è meglio bypassare la struttura mvc e accedere ” a più basso livello”.
E’ un pò quello che hanno fatto gli sviluppatori di Rails con Metal nell’ultima versione.
Anche symfony 2.0 si sta muovendo in questa direzione potento bypassare la struttura mvc.
E lo stesso si può fare usando zend.# - postato da sasuke - 19 Maggio 2009 - 19:16







