MVC è solo il SEO della programmazione PHP?


9

Ci sono circa un milione di "framework PHP". E la maggior parte di loro si considera come seguendo il modello MVC. Sebbene sia gradito superare lo stile di codifica osCommerce (logica di elaborazione fortemente mescolata a SQL e HTML), esistono sicuramente approcci più semplici e facili da seguire per ottenere un design di applicazione sostenibile.

Il concetto originale MVC era mirato alle applicazioni GUI. E per Gtk / Python sembra possibile seguirlo di conseguenza. Ma le app Web PHP non funzionano su viste live (elementi della GUI) e un runtime del controller persistente. È certamente un termine improprio se descrive solo il codice usato + il raggruppamento di directory o la denominazione delle classi.

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

Alcuni ragionamenti elaborativi

Perché sospetto che le implementazioni di PHP non seguano il modello MVC reale:

Modelli : in teoria, i modelli dovrebbero essere grassi e contenere la logica aziendale, ei controller dovrebbero essere gestori sottili (input-> output). In realtà i framework PHP sostengono i modelli superficiali . CI e Symfony, ad esempio, equivalgono a Model == ORM. Anche l'input HTTP è gestito dal controller, non è trattato come modello.

Viste : soluzioni alternative con AJAX scontato, non ci possono essere viste sulle pagine web. I framework PHP continuano a pompare pagine. L'interfaccia segue ancora efficacemente il normale modello HTTP, non c'è alcun vantaggio rispetto alle applicazioni non MVC. (E, infine, nessuno dei framework php diffusi può effettivamente produrre output in GUI Views anziché HTML. Ho visto una libreria PHP che può operare Gtk / Console / Web, ma i framework no.)

Controller : non sono sicuro. Probabilmente i controller non devono essere di lunga durata e permanentemente attivi nel modello MVC. Nel contesto del framework PHP, sono comunque principalmente gestori di richieste. Non è proprio qualcosa di cui discutere, ma sembra un po 'frizzante.

Ci sarebbero descrittori migliori? Ho visto acronimi come PMVC o HMVC lanciati in giro. Sebbene le descrizioni diventino più ambigue lì, forse potrebbero descrivere gli attuali framework web meno hokey?


Quindi, in conclusione: i framework PHP implementano un concetto simile al MVC originale. Penso che sia meglio inchiodato qui: stackoverflow.com/questions/1549857/simple-php-mvc-framework/…
mario

Sono stato sorpreso di leggere che "la maggior parte dei framework PHP utilizza Views come semplici pagine". In tutti i framework PHP che ho usato, una vista può essere qualsiasi cosa, è fondamentalmente solo un modello HTML. Quindi potrebbe essere una casella di testo, una barra laterale, una barra di navigazione, un blocco di testo statico o persino un layout di pagina. Non riesco a pensare a nessun framework che non ti permetta di incorporare Views in Views, permettendoti di fare praticamente qualsiasi cosa fintanto che la tua logica / elaborazione aziendale viene eseguita in precedenza nel Controller.
Lotus Notes,

Il modello (non plurale) è un livello . Non è un singolo file o classe. È una raccolta di oggetti di dominio, mappatori di dati e servizi. Leggere questo .
James,

3
... SEO? "Ottimizzazione del motore di ricerca"?
Izkata,

Risposte:


12

Penso che tu lo stia guardando in modo completamente sbagliato. Un'app GUI e una pagina Web sono mondi a parte quindi la stessa identica definizione di MVC non funzionerà mai per entrambi. MVC è più sull'ideale: separare alcune parti dell'app come display e logica.

In PHP (o nel web in generale), una vista è la stessa pagina web: l'output HTML. Non è "live" secondo la tua definizione, ma fai semplicemente clic sui link per tornare al controller (ovvero un'altra richiesta di pagina).

Il controller e il modello è dove le cose differiscono, come hai spiegato. In PHP il modello tende a essere il livello dati, interagendo con il database e così via. Ma sta ancora modellando la situazione e il controller controlla ancora il flusso dell'applicazione, anche se solo una volta per caricamento della pagina.

Quindi il nome "Model-View-Controller" è perfettamente logico, sebbene un'implementazione diversa nelle app GUI rispetto alle app Web.


Non ho litigi con il concetto astratto di MVC. La mia obiezione è che i framework PHP sono disonesti riguardo all'implementazione di Passive-MVC. Anche il modello "Model-View-Presenter" è una descrizione più realistica. Ma certo, i termini devono essere piegati quando li applichi a un dominio diverso. La domanda originale; il termine flessione potrebbe renderlo una parola d'ordine?
mario,

3

Dato che non sono a conoscenza dei framework PHP, questo è visto da una visione linguistica di basso livello.

Modelli:

in teoria, i modelli dovrebbero essere grassi e contenere la logica aziendale

Questo è completamente da fare, non vedo cosa PHP abbia a che fare con questo ...

I modelli sono classi di dati in PHP che potrebbero probabilmente comunicare con il database,
quindi è possibile inviare al client lo stesso modello o un modello parziale in formato JSON.

Non direi business logic, è più simile alla logica dei dati (validazione, interazione con il database, import / export, ...).

e i controller dovrebbero essere gestori thin (input-> output)

Le tue classi Controller interagiscono con le classi Model, sono davvero sottili.

In base all'output, esegui alcune operazioni con i modelli ... E restituisci un ModelView al client ...

In realtà i framework PHP sostengono i modelli superficiali. CI e Symfony, ad esempio, equivalgono a Model == ORM. Anche l'input HTTP è gestito dal controller, non è trattato come modello.

Non sono davvero a conoscenza di quei framework PHP ...

Ma l'input HTTP deve essere gestito prima che raggiunga il controller,
puoi facilmente creare una classe che trasforma i dati GET e POST in routing e parametri corretti.

Questo è esattamente ciò che accade in ASP.NET MVC 2 e non c'è nulla di sbagliato in questo,
non so come ciò accadrà con PHP ma immagino che sarebbe strettamente correlato.

Potresti anche facilmente trasformare i dati GET e POST in un modello, il modello potrebbe contenere la logica del costruttore per questo. Oppure alcune classi separate potrebbero essere aggiunte a tale scopo.


Visualizzazioni:

soluzioni alternative con AJAX scontato, non è possibile visualizzare viste sulle pagine Web. I framework PHP continuano a pompare pagine.

Non vedo perché non sia possibile, l'unica differenza è il protocollo e PHP può restituire JSON, ecc ...

Una pagina è la tua vista e può richiedere e aggiornare tramite AJAX + JSON.
Ancora una volta, non sono davvero a conoscenza di quei framework PHP ma in ASP.NET MVC 2 funziona in questo modo.

L'interfaccia segue ancora efficacemente il normale modello HTTP, non c'è alcun vantaggio rispetto alle applicazioni non MVC. (E infine, nessuno dei framework php diffusi può effettivamente produrre output in GUI Views anziché HTML. Ho visto una libreria PHP che può operare Gtk / Console / Web, ma i framework no.)

L'unico vantaggio che ottieni (e questo è lo stesso con le normali applicazioni) è la separazione in Model (Data) + View (GUI) + Controller (Logic). Allo stesso modo, non vedrai un framework C ++ che può effettivamente essere generato in HTML o JSON invece che nelle viste GUI.


controller:

Non sono sicuro Probabilmente i controller non devono essere di lunga durata e permanentemente attivi nel modello MVC. Nel contesto del framework PHP, sono comunque principalmente gestori di richieste. Non è proprio qualcosa su cui discutere, ma sembra un po 'frizzante.

MVC è un'architettura / modello software, in cui il controller funziona e per quanto tempo non si raduna.


1

Ma le app Web PHP non funzionano su viste live (elementi della GUI) e un runtime del controller persistente.

No, lo fanno sicuramente!

Pensa alle applicazioni AJAX, quindi la vista chiede qualcosa al controller e ottiene una vista parziale,
questa vista o i dati vengono quindi inseriti da qualche parte nella pagina e quindi aggiornati in tempo reale.

Il controller è persistente anche perché è possibile utilizzare cookie / sessioni.

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

MVC è un'architettura software, alcuni framework potrebbero usarlo come un buzz, ma altri lo fanno correttamente ...
Vedi un elenco di alcuni framework su Wikipedia .

MVC è solo il SEO della programmazione php?

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


1
Certo, gli elementi dell'interfaccia utente AJAX lo avvicinano, ma questa è oggettivamente una soluzione alternativa. E sembra ancora piegare la definizione. (A proposito, sono a conoscenza di Cappucino.org e di altri veri e propri toolkit, ma mi riferivo al lordo dei framework PHP.)
mario,

Non lo chiameremmo una soluzione alternativa, potresti anche contare Qt e altri framework come soluzioni alternative anche allora ... Esiste solo l'overhead del trasferimento di dati tra server e client e con le attuali velocità di connessione e latenze questo non è nemmeno tanto più. Non vedo come stia piegando la definizione: il modello isola la logica di dominio (la logica dell'applicazione per l'utente) dall'input e dalla presentazione (UI), consentendo lo sviluppo, il test e la manutenzione indipendenti di ciascuno.
Tamara Wijsman,

1
Capisco cosa intendi. Se interpretate PHP come application server e AJAX come meccanismo RPC tra la logica e l'interfaccia utente, sì. Lo definirei comunque una soluzione alternativa su HTTP. OTOH non è sicuro se è rilevante per la denominazione MVC. Penso che in realtà mi oppongo all'implicazione che solo "" "MVC" "" fornisce le UI Web reattive e interattive che descrivi.
mario,

-1

Secondo me l'uso di MVC in php porta i programmatori sul web. È più facile passare, ad esempio, da Java a PHP quando sai come lavorare con MVC.


+1 Ma è solo un vantaggio terminologico o ci sono framework PHP vicini a un'implementazione Java. (E implicitamente, stai parlando di GUI Java o Web / Struts?)
Mario

Non lo so esattamente ma sto usando zend framework e immagino che sia lo stesso con altri framework MVC: è molto importante sapere cosa fare nel tuo modello, vista e controller e quindi il divario tra il mondo della programmazione e l'internetcripting il mondo è chiuso. Forse l'era della scrittura su Internet è finita e mi piacerebbe vederlo. È troppo difettoso.
Baklap,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.