La maggior parte del framework PHP MVC-strict [chiuso]

8

Ho cercato di avvolgere la mia testa attorno al pattern MVC per circa 6 mesi. Ho letto tonnellate di articoli, Q & A e post di blog sui pattern MVC e HMVC, ma semplicemente non lo capisco 100 %.

Ho provato ad imparare MVC esercitando uno dei framework MVC PHP ampiamente usati, CodeIgniter. Ho implementato alcuni siti Web interni per la mia azienda. E ANCORA, non capisco al 100%. Credo che uno dei modi migliori per imparare qualcosa sia seguire regole rigorosamente definite.

Quindi la mia domanda è: Qual è il framework PHP più rigido in termini di implementazione del pattern MVC? Uno che definisce il modo in cui utilizzo i modelli, i controller e le viste in modo da poter ottenere completamente ciò che è MVC?

    
posta kidonchu 17.04.2013 - 22:43
fonte

5 risposte

13

Risposta breve

Non esiste una cosa del genere.

Versione più lunga:

I framework non implementano pattern di progettazione ispirati a MVC o MVC. La tua applicazione fa.

MVC non è una salsa magica, che puoi aggiungere alla tua applicazione scaricandola in un framework. Invece, dovresti effettivamente imparare e capire il modello (e i princìpi e le pratiche che seguono, come SOLID , LoD , SoC ) . Solo così puoi provare a utilizzarlo nella tua scelta di un framework.

Se un framework pubblicizza che "ha MVC" , allora è completamente utter dren . In questa situazione, viene utilizzato per "vendere" il framework ai noob che si preoccupano più dell'ultimo hype, quindi delle pratiche di progettazione e codifica dell'applicazione.

L'obiettivo di un framework è quello di fornire una raccolta di strumenti che, se utilizzati nel loro insieme, offrono un ambiente di sviluppo alterato / migliorato. Si occupano di routing, autoloading, astrazioni di basso livello per l'archiviazione (no, non sto parlando di anti-pattern del record attivo) e del resto della cosa che consente di risparmiare tempo nello sviluppo e nella manutenzione di boh.

In conclusione.

Non ci sono framework MVC in PHP. Tutti quelli che mi dichiarano tali sono in realtà tra i peggiori. Vale a dire - codeigniter, cakephp e yii. Evitali a tutti i costi (tranne se ti pagano molto bene per questo).

Se hai bisogno di usare un framework, al momento le tue migliori opzioni saranno l'ultima versione di Symfony 2.x, Zend Framework 2.x o Laravel 4.x. Questi non implementeranno MVC per te, ma invece faranno meno danno per la tua architettura dell'applicazione.

    
risposta data 18.04.2013 - 00:09
fonte
7

Posso solo parlare con Cake, e non ho nulla di buono da dire in termini di MVC. Fanno non fanno bene MVC. Codeigniter è molto nella stessa vena. Non è affatto strano che non hai "capito" MVC anche dopo averlo usato per un po '.

MVC sta semplicemente separando correttamente tre componenti distinti della logica della tua applicazione: il core dell'app , la presentazione e la colla necessaria per far funzionare entrambi in una vera contesto mondiale.

Il nucleo della tua app, che contiene tutta la logica aziendale, l'interazione con il database, i servizi, i segnali acustici e i boop che rendono la tua app "la tua app" il modello. Il modello non è una cosa specifica in una forma specifica, è tutto ciò che è necessario per far funzionare la tua app come fa. Hai solo one "modello", che è la tua app.

La vista è usata per produrre in qualche modo ciò che fa il tuo modello. È l'interfaccia utente. È tutto ciò che è necessario per mostrare informazioni utili all'utente. Questo potrebbe essere un sito Web, potrebbe essere un'interfaccia a riga di comando, potrebbe essere una GUI desktop nativa. Puoi utilizzare tutti e tre nella tua app.

Il Controller è semplicemente tutto ciò che è rimasto per fare quel lavoro, principalmente ciò che prende l'input dell'utente e lo indirizza nel posto appropriato. Potresti avere diversi tipi di controller per diversi tipi di contesto, ad es. uno che può gestire le richieste HTTP in arrivo, uno che gestisce l'input da riga di comando e uno che è collegato agli eventi della GUI.

Quale particolare forma prendono queste singole parti dipende interamente dalla tua app. Tutti e tre possono essere una sorta di proprie mini-applicazioni. Ogni "modello" di framework prefabbricato con template è realizzato per un caso generalizzato per aiutarti a ottenere qualcosa attivo e funzionante rapidamente; spesso non è la forma ottimale che dovrebbe assumere il tuo modello. Dovrai creare la tua struttura per la tua app , qualunque sia la soluzione più adatta per crearla. Analizza i principi OOP, SOLID, l'iniezione di dipendenza ecc. E crea il tuo modello di base in base a queste linee guida. Quindi avvolgi le viste e i controller attorno ad esso, se necessario.

Il punto di questa separazione è semplicemente quello di rendere l'app mantenibile ed estensibile. Il modello non contiene nulla che sia specifico per una specifica forma di input o output. Ad esempio, non contiene alcun testo specifico per il formato (come i messaggi di errore in formato HTML). Non assume alcuna forma particolare di input (come le richieste HTTP). La vista al contrario non contiene alcuna logica aziendale, il suo compito è solo quello di output . E il controller non contiene alcuna logica di business, il suo compito è solo quello di "input" . Il motivo è semplicemente che sia il controller che la vista sono intercambiabili, ma la tua app no.

Se vuoi usare un framework per questo, usa uno che è modulare e ti permette di fare tutto ciò che devi fare. I framework pick-and-select di Zend, Symfony, Laravel e simili sono i più adatti per questo.

    
risposta data 18.04.2013 - 08:36
fonte
7

Un simile framework non può esistere per una serie di motivi.

Prima di tutto, il Modello nel pattern MVC è la parte che rende l'applicazione tua . Se un framework dovesse definire rigorosamente l'aspetto di un modello, allora tale framework sarebbe utilizzabile solo per una o al massimo una manciata di applicazioni. Questo impedisce effettivamente di essere un framework.

Il secondo problema è che non esiste un consenso universale su come dovrebbe essere una corretta applicazione del pattern MVC. Ad esempio, alcuni diranno che il Controller deve fornire la Vista con i dati di cui ha bisogno dal Modello, mentre altri diranno che la Vista dovrebbe recuperare le informazioni di cui ha bisogno da sola e il Controller deve solo assicurarsi che la Vista sappia dove trova il modello.
Un altro esempio, più specifico per le applicazioni Web, è la quantità di elaborazione che la Visualizzazione può eseguire. Per alcuni, la vista deve essere costituita esclusivamente da file HTML in cui alcuni segnaposto vengono sostituiti con il contenuto effettivo (in genere recuperati dal controller dal modello), mentre altri sono perfettamente a loro agio consentendo alla vista di eseguire l'elaborazione relativa all'interfaccia utente, ad esempio l'internazionalizzazione del contenuto presentato.

    
risposta data 18.04.2013 - 09:49
fonte
2

Capisco che questo post sia vecchio di anni, il che è ironicamente il motivo per cui sto postando questa risposta. Prima di tutto, alcune delle persone che hanno risposto a questa domanda hanno ragione. Non troverai mai un framework PHP che arrivi "MVC Ready" appena fuori dagli schemi ... necessariamente. Visto che il framework dovrebbe essere una base su cui Dev's può basarsi su di esso, seguendo MVC. Tuttavia, nell'ultimo anno da quando è stato pubblicato, alcuni dei framework PHP in circolazione sono sicuramente arrivati in un modo long .

Ho giocato un po 'con CakePHP, anche fino ad oggi è un orribile, disordinato setup di directory e struttura, non c'è una chiara distinzione tra la logica, ha un codice piuttosto scarsamente commentato, e tutto è un po' stipato insieme in un pasticcio confuso. Questo non è uno sproloquio su CakePHP, bada bene, è una semplice verità.

Zend, è eccellente. Forniscono un'eccellente documentazione e amp; commentare i codici, avere una comunità molto amichevole e fornire una struttura molto bella per sviluppatori che sono principianti e allo stesso modo intermedi. Sono venuti un modo lungo dal momento che l'OP lo ha pubblicato.

E alla gente che dice che non esiste una tale struttura per rispondere alla domanda dell'OP, hanno ragione come ho detto sopra. Tuttavia, hanno anche torto. Zend, Laravel e CodeIgniter sono strutture sorprendenti, e mentre non "danno" MVC, creano sicuramente una strada per te come sviluppatore per creare applicazioni MVC magnificamente costruite, considerando che tu, come lo sviluppatore, segui il buon MVC pratiche.

A quelli in questa discussione dicendo che CodeIgniter è orribile. Hai torto, almeno per gli standard odierni. Al momento di questo post non ero in framework quindi non l'avevo ancora guardato. Perciò a quel tempo potrebbe essere stato orribile. Ma lo uso TUTTE le mie applicazioni web ora. Fanno un ottimo lavoro nel creare una solida struttura con una struttura di directory comprensibile, oltre a fornirti alcuni strumenti straordinari per iniziare a fare MVC. Fanno un ottimo lavoro in logica distinzione, hanno una fantastica community per il supporto e forniscono un framework completo e gratuito che, di nuovo se segui le buone pratiche MVC, può trasformarsi in alcune incredibili applicazioni.

Al punto principale. Volevo interporre la mia opinione su questo argomento. Non troverai mai il framework perfetto, MVC, pronto all'uso . Tuttavia, se si utilizzano buone pratiche MVC e si sceglie un framework solido come Zend, Laravel e / o CodeIgniter, tutto andrà bene. Perché la verità è che il MVC spetta allo sviluppatore come implementa le buone pratiche e non il framework. Il framework offre le basi, il resto spetta allo sviluppatore.

Buoni framework da utilizzare come riferimenti

  • CodeIgniter
  • Zend Framework
  • laravel
  • Symfony 2 (Aggiunto dopo aver letto il commento, perché è anche un eccellente framework)

Ricorda che quando li usi, spetta a te che lo sviluppatore segua le buone pratiche MVC. Ci sono tonnellate e tonnellate di tutorial là fuori su buone pratiche MVC. Mi sono imbattuto nel sito web di un gentiluomo che ha alcune linee guida incredibili , e punta al corretto MVC, e finora i suoi post sul blog sono stati molto belli e lui è un ottimo punto di partenza per imparare.

Riferimento

  • Blog di Tom Butler's Programming: link
risposta data 15.03.2015 - 18:39
fonte
1

Sembra che tu stia solo avendo dei problemi a "mettere tutto insieme" perché molti tutorial sono scarsi a spiegare MVC in modo chiaro. Ti consiglio di mettere le mani "sporche" e di creare una semplice applicazione con circa 3-5 quadri diversi per vedere come si avvicinano di solito al problema. Alcuni hanno documentazione su come configurare l'architettura MVC di base per un'applicazione e, in caso contrario, puoi sempre google per un paio di esercitazioni in mvc per quel particolare framework.

FWIW Mi è piaciuto il suggerimento per il layout di directory / progetto di Zend: link

Dai anche un'occhiata al "Quadro MVC PHP senza framework" di Rasmus. Dimostra che non hai davvero bisogno di un framework, puoi semplicemente costruirti da solo per soddisfare le tue esigenze specifiche. Inoltre riceverai un riscontro dai commenti! link

    
risposta data 18.04.2013 - 15:13
fonte

Leggi altre domande sui tag