Remarque: Robert C. Martin (alias Oncle Bob) explique cela d'une manière bien meilleure et humoristique dans son discours, Architecture the Lost Years . Un peu long mais enseigne plein de bons concepts.
tl; dr: Ne pensez pas et ne planifiez pas votre application en termes de MVC. Le framework MVC n'est qu'un détail d'implémentation.
La chose la plus déroutante à propos de MVC est que les développeurs essaient d'utiliser tous les composants collés ensemble.
Essayez de penser en termes de programme, pas en termes de cadre.
Votre programme a un but. Il prend des données, fait des choses avec les données et renvoie des données.
De cette façon, le controller
est le mécanisme de livraison de votre programme.
- Un utilisateur envoie une demande à votre programme (disons, ajoutez un produit au panier).
- Le contrôleur prend cette demande (informations produit et informations utilisateur), il appelle la partie nécessaire de votre programme qui traitera cette demande
$user->addToCart($product)
- Votre programme (
addToCart
fonction de l' user
objet dans ce cas) fait le travail auquel il est destiné et renvoie une réponse (disons success
)
- Le contrôleur prépare la réponse en utilisant les éléments pertinents
view
: par exemple. dans l'objet contrôleur$this->render($cartView('success')
De cette façon, les contrôleurs sont découplés du programme et utilisés comme mécanisme de livraison. Ils ne savent pas comment fonctionne votre programme, ils savent simplement quelle partie du programme doit être appelée pour les demandes.
Si vous souhaitez utiliser un autre framework, votre application n'aura pas besoin de changement, il vous suffira d'écrire les contrôleurs appropriés pour appeler votre programme pour les demandes.
Ou si vous souhaitez créer une version de bureau, votre application restera la même, il vous suffira de préparer un mécanisme de livraison.
Et le Model
. Considérez-le comme un mécanisme de persistance.
De la manière OO, il existe des objets dans votre programme qui contiennent les données.
class User {
//...
private $id;
private $shoppingCart;
//...
}
class Product {
//...
private $id;
//...
}
Lorsque vous ajoutez un produit au panier, vous pouvez ajouter le product::id
au auuser::shoppingCart
.
Et lorsque vous souhaitez conserver les données, vous pouvez utiliser le model
partie du framework, qui consiste généralement à utiliser un ORM, pour mapper les classes aux tables de la base de données.
Si vous souhaitez modifier l'ORM que vous utilisez, votre programme restera le même, seules les informations de mappage changeront. Ou si vous voulez éviter les bases de données toutes ensemble, vous pouvez simplement écrire les données dans des fichiers en texte brut et votre application restera la même.
Alors, écrivez d'abord votre programme. Si vous programmez avec la méthode 'OO', utilisez de simples objets anciens du langage. Ne pensez pas en termes de MVC au premier abord.