MVC in PHP

Venerdì 17 Febbraio 2006 - 10:50

di Gabriele Farina

PHP e Open Source

Oggi mi è stato posto un quesito: un amico mi chiedeva qual era il miglior sistema per lavorare seguendo il pattern MVC in PHP. So che non esiste un sistema migliore in assoluto, ma questa domanda mi ha fatto venire voglia di guardare ciò che viene presentato in rete per trovare qualcosa che si avvicina ad una buona risposta oggettiva alla domanda.

Per ora ho guardato velocemente, rilevando tre strumenti interessanti:

  • CakePHP: una soluzione OOP molto semplice e veloce fortemente focalizzata sul Rapid Application Development;
  • Synfony: un’altra soluzione interessante e ben fatta, sviluppata in PHP5;
  • Biscuit: un’implementazione in PHP che segue la struttura dell’ormai conosciutissimo Ruby on Rails.

Qualcuno di voi utilizza abitualmente uno di questi prodotti o altri con finalità simili ?

Per quello che ho visto, tutte le librerie paiono interessanti, ma sono sempre titubante sul fatto di utilizzare interi framework sviluppati da altra gente. Siamo tutti d’accordo sul fatto che NON esiste un framework che si adatta alla perfezione a tutte le situazioni, e per questo motivo ritengo che la strada da percorrere sia quella di sviluppare una serie di librerie più o meno complesse per i compiti più frequenti (persistenza degli oggetti, template engine, ecc …) e poi unirle insieme in un core sempre nuovo che si adatta al lavoro che ci si trova di fronte.

Se per esempio volessi aggiornare un sistema complesso (magari con la sua libreria di persistenza degli oggetti e le sue politiche di autenticazione) usando uno dei framework tuttofare, mi troverei di fronte all’ostacolo di dover studiare e modificare gran parte del framework per adattarlo alla struttura che ho ha disposizione. Questo non è un buon approccio al problema: preferisco prendere ciò che voglio tenere del vecchio sistema, aggiungervi nuove librerie ed implementare un core che si adatti perfettamente all’applicazione su cui sto lavorando.

Con lo stesso lavoro raggiungo un risultato migliore. Non vi pare ?

Tags:

Categoria: PHP e Open Source | Permalink

Commenti

1

mmm… da hobbista non ho capito cosa sia questo MVC. il sito ufficiale non è che sia comprensibile subito…

# - postato da mdsjack - 17 Febbraio 2006 - 11:39

2

Anche io vorrei capirci di più. Sviluppo piccole applicazioni in php mysql per uso lan interno, ma mi piacerebbe approfondire.

# - postato da Fabiolous - 17 Febbraio 2006 - 11:55

3

——TRATTO DA DISPENSE UNIVERSITARIE——-
Il punto più importante dell’uso di MVC è separare i componenti in tre unità distinte:
il modello
la visualizzazione
il controller.
L’idea alla base è separare i dati concernenti l’applicazione e le linee della logica aziendale, la presentazione dei dati e le modalità di interazione con i dati, in entità distinte e chiamate rispettivamente Mode(modello), View (visualizzazione) e Controller (supervisore). Si tratta di uno schema progettuale flessibile, nel quale possono essere fornite e facilmente modificate diverse presentazioni dei dati (le visualizzazioni)dove possono essere apportate modifiche alle regole aziendali o alla appresentazione fisica dei dati (il modello), senza toccare nulla delcodice dell’interfaccia utente.

# - postato da tvnturbo - 17 Febbraio 2006 - 11:56

4

Ritengo che le peersonalizzazioni dei framework non siano buona cosa. Il tempo di farsi un framework o di imparare ad usarne uno gia fatto, non sono poi così distanti. Il vantaggio di usare un framework standard è quello di poter far mettere mano da un progetto a programmatori diversi con un basso tempo di startup. Ma se il framework non è più standard chi si trova poi ad usarlo non ne capisce il funzionamento ed il tempo di startup ritorna ad essere alto.

Meglio un framework tuo allora, lo strutturi come ti piace e se devi fare modifiche sai dove mettere le mani; inoltre minimizzi il grain introdotto dal framwork standard.

# - postato da Marcello - 17 Febbraio 2006 - 12:31

5

Direttamente dall’msdn:
http://msdn.microsoft.com/libr.....DesMVC.asp

# - postato da kentaromiura - 17 Febbraio 2006 - 12:31

6

ciao Gabriele,
io ho usato CakePHP e MVCPHP (www.phpmvc.net/) che sono sicuramente quelli che hanno una comunità più grande.
Li trovo entrambi molto validi, acnhe se Cake PHP (che è dichiaratamente ispirato a RubyonRails) riduce notevolmente i tempi di sviluppo grazie anche all’ERB.

Per quanto mi riguarda non uso per qualsaisi tipo di lavoro il design pattern MVC.
A volte prefersico applicare il refactoring e trovo che per molte cose sia la soluzione più veloce ed ottimale.

# - postato da Marco Casario - 17 Febbraio 2006 - 12:33

7

Gabriele occhio al titolo del post.

MCV in PHP diventa MVC in PHP ;)

# - postato da Marco Casario - 17 Febbraio 2006 - 12:35

8

… lavorare seguendo il pattern MVC in PHP …
io non vorrei che si facesse confusione tra lo sviluppare in PHP attraverso un sistema (framework) che sfrutta MVC o strutturare con PHP un proprio applicativo in MVC
(con cosa sviluppo è diverso da come sviluppo) .

Trovo quindi che l’ MVC per un framework sia il pattern ideale ma non trovo che l’ MVC sia un pattern “assolutamente valido” per strutturare applicazioni in PHP.

Mi piacerebbe invece che fossero segnalati o descritti alcuni patterns da considerare quando si deve creare qualcosa in PHP (a prescindere dal framework usato o dal pattern che questo stesso utilizza) :-)

# - postato da andr3a - 17 Febbraio 2006 - 14:56

9

in realtà per quel che ricordo io MVC non sarebbe neanche un pattern, ma uno protopattern, insomma una cosa che dovrebbe essere innata in tutti i progetti.

E’ un po’ come “usare funzioni” si può programmare senza raccogliere il codice in funzioni ma in generale ha raramente senso.

IMO ha sempre senso usare php per un progetto che vada oltre il mettere due form in fila, il che però non vuol dire che uno debba imbarcarsi nell’uso di un intero framework.

andr3a, quali sono i casi in cui trovi che usare MVC non sarebbe un approccio valido?

# - postato da riffraff - 17 Febbraio 2006 - 15:35

10

quali e quanti sono i protopattern utilizzabili ?
perchè sceglierne uno piuttosto che un altro ?

… la mia “risposta” alla tua domanda è in queste domande che mi piacerebbe fossero trattate sul forum o perchè no, su edit :-)

# - postato da andr3a - 17 Febbraio 2006 - 15:44

11

Secondo me il pattern MVC è molto importante…’obbliga’ gli sviluppatori a rispettare una certa struttura nella stesura del progetto…in questo modo l’eventuale applicazione risulta più facile da leggere…e nei progetti opensource è molto importante…esistono molte applicazioni opensource, anche tra le più grosse e supportati, che non applicano un minimo di divisione tra ‘controller’ e ‘view’, e questo rende quasi impossibile (o cmq difficile) la personalizzazione del prodotto.

# - postato da Pilu - 17 Febbraio 2006 - 18:09

12

Caro Pilu, concordo in pieno con te!

In un framework (ben progettato e realizzato) che utilizza il pattern MVC, è (solitamente) necessario implementare determinati metodi (funzionalità) per ogni specifico tipo di azione che si vuole realizzare.
Naturalmente il livello di astrazione partirà dall’alto fino ad arrivare all’azione pià specifica. In questo modo la nostra azione erediterà dalla classe Astratta o Interfaccia più vicina alle sue necessità.

Soprattutto ora che in php5 si possono utilizzare interfaccie e classi astratte è il momento più bello per implementare frameworks MVC sempre più vicini al modello Java.

Inoltre tenevo a ricordare che alcuni sviluppatori PHP rifacendosi alla separazione tra logica di business e di presentazione (model e view), hanno creato uno dei template engine più potenti in circolazione: Smarty.
Con Smarty si ha la VERA separazione tra codice php e (X)HTML, con tutti i relativi vantaggi:

  • i designers dovranno imparare semplicissimi costrutti (smarty tags), e renderanno il programmatore libero di concentrarsi sulla logica di business.
  • Riusabilità del codice: molti templates si potranno generalizzare e riutilizzare

Avendoci lavorato assiduamente da due anni in diversi progetti posso affermare che è:

  1. Semplice da usare
  2. Potente
  3. Stabile
  4. Flessibile ed Espandibile all’infinito. (Plugins & Filters)
  5. E’ presente la documentazione ufficiale in italiano

Riguardo all’interessante articolo di Gabriele, sono d’accordo con lui! E’ molto meglio prendere quello che ci serve di un framework e implementare nuove funzionalità, piuttosto che modificarlo interamente!
Personalmente però, preferisco progettare e implementare la base del mio framework, e inserirci le librerie (PEAR) che mi servono.

Infine lascio il link del framework (MVC) Mojavi.
E’ opensource, scritto in PHP e si rifà totalmente al modello originale di Java (molto simile al framework struts).
Mi è piaciuto particolarmente perchè è stato sviluppato con una visione che condivido pienamente: lasciare libero chiunque lo utilizzi di gestire la logica di business e / o quella di presentazione come meglio preferisce.
Si può con facilità decidere di utilizzare per la presentazione di determinate azioni Smarty, mentre per altre la tecnica XML/XSL, tanto per fare un esempio.
Vale la pena di dargli un’occhiata!

Scusate se mi sono dilungato troppo, ma c’è n’è tantissimo da dire!! :D

# - postato da Giorgio - 18 Febbraio 2006 - 06:16

13

Siamo tutti daccordo che l’MVC è una grande cosa, che se applicata in modo corretto da la possibilità di snellire il lavoro e rendere il codice molto più leggibile e pulito.

Io da poco uso CakePHP e devo dire che per ora ho apprezzato il lavoro svolto da altri, anche se concordo con chi ha postato dicendo che tra imparare ad utilizzare un framework e farsene uno da se, non c’è molta differenza e fino a poco tempo fa ero scettico sul fatto di usare un framework pronto per l’uso, ma poi ho detto “perchè no”, magari dando anche un contributo alle comunità.

# - postato da Simohack - 21 Febbraio 2006 - 09:15

14

Ho da poco cominciato a programmare anche in java, e dove lavoro viene usato struts. Da esperienza sul campo ho capito cosa è l’mvc.
L’analogia l’ho vista subito con smarty, sinceramente gli altri non li ho provati quindi non posso fare un confronto, ma in 2 giorni ero già produttivo. Smarty è semplice e ha diverse funzioni interessanti già integrate (ad esempio per i form).
Da provare per chi non lo conosce.
Io mi riprometto di provare gli altri.
ciao

# - postato da Giovanni Battista Lenoci - 21 Febbraio 2006 - 09:34

15

Qui al TeamMosaico abbiamo intrapreso lo sviluppo di una libreria che forse può essere utile, separazione di codice e interfaccia, oggetti XML estensibili.
Ne parlo nel nostro blog ufficiale.

ciao a tutti

# - postato da Carlo Cassinari - 11 Aprile 2006 - 12:01

16

Io sto usando Code Igniter (http://www.codeigniter.com): lo trovo semplice da usare, ma molto ricco di funzionalità e in grado di offrire una logica pulita.

# - postato da Andrea Bersi - 18 Giugno 2006 - 15:01

17

Da quel poco che sto imparando dalla documentazione di cake php lo trovo un buono stimolo per portare avanti le mie conoscenze (alquanto basilari) di programmazione un minimo strutturata. Inoltre è molto più semplice trovare un server adeguato.

# - postato da Leandro Pedroni - 09 Ottobre 2006 - 21:56

18

io ho provato codeigniter e ho scritto un tutorial sul mio blog:

http://www.programmazione-web......gniter.php

ho inserito anche una introduzione su MVC:

http://www.programmazione-web......do-mvc.php

se passate lasciate un commento! grazie

# - postato da neryo - 11 Marzo 2008 - 17:39

19

Mi sono fatto un miniframework da me e lo adatto a seconda delle necessità, secondo me è la soluzione migliore… e poi i fw già pronti risultano sempre più pesanti rispetto a quello che si deve fare, la velocità è importante…
io sono giunto a questa conclusione…
cmq un buon fw non nominano in questa discussione è p4a (php for application), l’ho usato per un pò, poi l’ho abbandonato perché troppo complesso da studiare e troppo lento rispetto ad un codice ad oc…
Saluti…

# - postato da arturu - 21 Febbraio 2010 - 14:44

Inserisci il tuo commento:





(puoi usare i seguenti tag HTML per formattare il testo -
a href, b, i, br/, p, strong, em, ul, ol, li, blockquote, pre):

 

Anteprima del commento