Nota: Robert C. Martin (aka Zio Bob) lo spiega in modo molto migliore e divertente nel suo keynote, Architecture the Lost Years . Un po 'lungo ma insegna molti buoni concetti.
tl; dr: non pensare e pianificare la tua app in termini di MVC. Il framework MVC è solo un dettaglio di implementazione.
La cosa più confusa su MVC è che gli sviluppatori cercano di usare tutti i componenti incollati insieme.
Prova a pensare nei termini di un programma, non nei termini del quadro.
Il tuo programma ha uno scopo. Prende alcuni dati, fa cose con i dati e restituisce alcuni dati.
In questo modo, controller
è il meccanismo di consegna del tuo programma.
- Un utente invia una richiesta al tuo programma (diciamo, aggiungi un prodotto al carrello).
- Il controller accetta quella richiesta (informazioni sul prodotto e informazioni sull'utente), chiama la parte necessaria del programma che gestirà questa richiesta
$user->addToCart($product)
- Il tuo programma (
addToCart
funzione user
dell'oggetto in questo caso) fa il lavoro che deve fare e restituisce una risposta (diciamo success
)
- Il responsabile del trattamento prepara la risposta utilizzando i pertinenti
view
: ad es. nell'oggetto controller$this->render($cartView('success')
In questo modo, i controller vengono disaccoppiati dal programma e utilizzati come meccanismo di consegna. Non sanno come funziona il tuo programma, sanno solo quale parte del programma deve essere chiamata per le richieste.
Se desideri utilizzare un altro framework, la tua app non avrà bisogno di modifiche, dovrai solo scrivere controller pertinenti per chiamare il tuo programma per le richieste.
Oppure, se vuoi creare una versione desktop, la tua app rimarrà la stessa, dovrai solo preparare un meccanismo di consegna.
E il Model
. Pensalo come un meccanismo di persistenza.
In modo OO, ci sono oggetti nel tuo programma che contengono i dati.
class User {
//...
private $id;
private $shoppingCart;
//...
}
class Product {
//...
private $id;
//...
}
Quando aggiungi un prodotto al carrello, puoi aggiungere il product::id
aluser::shoppingCart
.
E quando vuoi conservare i dati, puoi usare model
parte del framework, che generalmente consiste in un ORM, per mappare le classi alle tabelle del database.
Se vuoi cambiare l'ORM che usi, il tuo programma rimarrà lo stesso, cambieranno solo le informazioni di mappatura. Oppure, se vuoi evitare tutti i database insieme, puoi semplicemente scrivere i dati in file di testo semplice e la tua app rimarrà la stessa.
Quindi, scrivi prima il tuo programma. Se stai programmando con il modo 'OO', usa semplici vecchi oggetti del linguaggio. Non pensare in termini di MVC all'inizio.