Domanda

Non c'è intorno ad un triliardo "framework PHP". E la maggior parte di loro si legge come dopo il pattern MVC. Mentre è benvenuto a superare stile di codifica osCommerce (logica di elaborazione fortemente mescolati con SQL e HTML), ci sono certamente più semplice e più facile da seguire approcci per ottenere un disegno di applicazione mantenibile.

Il concetto originale MVC è stato mirato ad applicazioni GUI. E per Gtk / Python sembra fattibile per seguire di conseguenza. Ma PHP applicazioni web non funzionano su Vista dal vivo (elementi GUI) e un tempo di esecuzione di controllo persistente. E 'quasi certamente un termine improprio se solo descrive la + directory codice utilizzato raggruppamento o classe di denominazione.

"MVC" sembra essere utilizzata come una parola d'ordine per framework PHP. E realtà ho visto uno o due maturi framework PHP ammetterlo, ma ridefinendo la frase in ogni caso in modo che corrisponda interna.
Quindi è generalmente olio di serpente? Perché non è migliore terminologia utilizzata, e di un concetto più ragionevole per PHP mantenibile propagato?

Alcuni ragionamento elaborative

Perché ho il sospetto che le implementazioni PHP non seguono il vero pattern MVC:

Modelli : in teoria, modelli dovrebbero essere grassi e contengono la logica di business, e regolatori dovrebbero essere i gestori sottili (input-> di uscita). In realtà i framework PHP sostengono Modelli. CI e Symfony ad esempio equiparare Modello == ORM. Anche ingresso HTTP è gestito dal controllore, non è considerato modello.

Visualizzazioni : soluzioni alternative con AJAX scontato, non ci può non essere Visualizzazioni sulle pagine web. framework PHP ancora pompa fuori pagine. L'interfaccia ancora segue in modo efficace il modello HTTP ordinaria, non c'è alcun vantaggio rispetto applicazioni non-MVC. (E, infine, nessuno dei framework PHP diffuse può di fatto l'uscita di GUI Viste invece di HTML. Ho visto una libreria PHP che può operare Gtk / Console / Web, ma i quadri non lo fanno.)

Regolatore : io sono sicuro. Controller probabilmente non hanno bisogno di essere a lungo in esecuzione e persistentemente attiva nel modello MVC. In PHP contesto quadro, sono però per lo più gestori delle richieste. Non proprio qualcosa da ottenere circa polemico, ma semplicemente si sente un po 'buzzwordish.

ci sarebbe descrittori migliori? acronimi che ho visto come PMVC o HMVC gettato intorno. Anche se le descrizioni si fanno più ambiguo lì, forse questi sarebbero descrivere i framework web attuali meno finti?

È stato utile?

Soluzione

Penso che si sta guardando questo in tutto il modo sbagliato. Un'applicazione GUI e una pagina web sono mondi a parte in modo che la stessa esatta definizione di MVC non funzionerà mai per entrambi. MVC è più circa l'ideale:. Separare alcune parti del app, come la visualizzazione e la logica

In PHP (o il web in generale), un Visualizza è la pagina web stessa: l'output HTML. Non è "live" secondo la vostra definizione, ma è sufficiente fare clic sui collegamenti per tornare al controller (vale a dire un'altra richiesta di pagina).

Il controller e Modello è dove le cose differiscono, come lei ha spiegato. In PHP il modello tende ad essere il livello dati, interagendo con il database e così via. Ma è ancora modellando la situazione, e il controllore controlla ancora il flusso applicativo, se solo una volta per caricamento della pagina.

Quindi, il nome di "Model-View-Controller" è perfettamente logico, anche se un implementazione diversa in applicazioni GUI vs applicazioni web.

Altri suggerimenti

Come sono inconsapevoli del Php Frameworks questo è visto da una vista linguaggio di basso livello.

Modelli:

in teoria, modelli dovrebbero essere grasso e contenere la logica di business

Questo è completamente a fare, io non vedere ciò che PHP ha a che fare con questo ...

I modelli sono classi di dati in PHP che probabilmente potrebbe comunicare con il database,
allora si potrebbe anche inviare lo stesso modello o un modello parziale, in formato JSON al cliente.

Non direi logica di business, è più come la logica dei dati (validazione, l'interazione del database, import / export, ...).

e controller dovrebbero essere i gestori sottili (input-> uscita)

I tuoi classi controller interagiscono con le classi del modello, sono davvero sottili.

In base alla potenza, fare alcune cose con i modelli ... e restituire un modelview al cliente ...

In realtà i framework PHP sostengono Models poco profonde. CI e Symfony ad esempio equiparare Modello == ORM. Anche ingresso HTTP è gestito dal controllore, non è considerato modello.

In realtà non sono a conoscenza di questi framework PHP ...

Ma HTTP in ingresso deve essere maneggiato prima che raggiunga il controller,
si può facilmente creare una classe che a turno GET e POST dati in bene di routing e parametri.

Questo è esattamente ciò che accade in ASP.NET MVC 2 e non c'è niente di sbagliato con esso,
Non so come questo possa accadere con PHP, ma credo che sarebbe strettamente correlati.

Si potrebbe anche facilmente trasformare il GET e POST dati in un modello, il modello forse potrebbe contenere la logica di costruzione per questo. O alcune classi separate potrebbero essere aggiunte a tale scopo.


Visualizzazioni:

soluzioni alternative con AJAX scontato, non ci può essere Visualizzazioni sulle pagine web. framework PHP ancora pompa fuori pagine.

non vedo il motivo per cui non poteva, l'unica differenza è il protocollo e PHP può tornare JSON, ecc ...

Una pagina è la sua opinione e può richiedere e aggiornamento tramite AJAX + JSON.
Anche in questo caso, io non sono veramente consapevoli di questi framework PHP, ma in ASP.NET MVC 2 funziona in questo modo.

L'interfaccia ancora segue in modo efficace il modello HTTP ordinaria, non c'è alcun vantaggio rispetto applicazioni non-MVC. (E, infine, nessuno dei framework PHP diffuse può di fatto l'uscita di GUI Viste invece di HTML. Ho visto una libreria PHP che può operare Gtk / Console / Web, ma i quadri non lo fanno.)

L'unico vantaggio che si ottiene (e che è lo stesso con le applicazioni normali) è la separazione in modello (dati) + View (GUI) + Controller (Logic). Simile, non si vedrà un quadro C ++ che possono di fatto l'uscita di HTML o JSON invece di GUI Vista.


Controller:

Non sono sicuro. Controller probabilmente non hanno bisogno di essere a lungo in esecuzione e persistentemente attiva nel modello MVC. In PHP contesto quadro, sono però per lo più gestori delle richieste. Non proprio qualcosa da ottenere circa polemico, ma semplicemente si sente un po 'buzzwordish.

MVC è un'architettura software / modello, in cui il controller viene eseguito e per quanto tempo non fa Mather.

Ma PHP applicazioni web non funzionano su Vista dal vivo (elementi GUI) e un tempo di esecuzione di controllo persistente.

No, di sicuro fanno!

Pensate di applicazioni AJAX, poi la vista chiede qualcosa al controller e ottiene una vista parziale indietro,
questo punto di vista o di dati viene poi riempito da qualche parte nella pagina e, quindi, dal vivo aggiornato.

Il controller è anche persistente, perché si può usare cookies / sessioni.

"MVC" sembra essere utilizzata come una parola d'ordine per framework PHP.

MVC è un'architettura software, alcuni quadri potrebbero usarlo come un ronzio, ma altri farlo correttamente ...
Vedere un elenco di alcuni quadri su Wikipedia .

è MVC solo il SEO di programmazione php?

MVC e SEO sono due cose a parte, ma sì ... MVC è sempre più popolare.

A mio parere utilizzando MVC in php porta programmatori al web. E 'più facile per ottenere da, per esempio Java a PHP quando si sa come lavorare con MVC.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top