J'ai lu beaucoup d'exemples triviaux de calculatrices et de thermomètres, mais je n'arrive pas à faire correspondre le modèle à des applications du monde réel.MVC - Comment ça marche dans le monde réel?
Supposons que vous ayez un scénario plus compliqué. Supposons que vous ayez un panier d'achat de site Web qui oblige les utilisateurs à se connecter avant d'ajouter au panier. Tout d'abord, l'utilisateur voit la page du produit (/ product/detail) et clique sur ajouter un élément (/ cart/add/207366). L'utilisateur n'est pas encore connecté, il doit donc se rendre sur la page de connexion (/ user/login), puis, étant intelligent sur le flux, il l'amène à la vue du panier (/ panier/liste). À partir de là, ils peuvent revenir à la page de détail du produit d'origine pour continuer à magasiner.
Disons que nous avons 3 tables de base de données: users, usercart et products. Quel est le/les modèle (s) dans cette situation? Est-ce que tout ce flux serait encapsulé dans la fonction addProductToCartFlow du modèle ShoppingCart? Cela semblerait être un peu brouillon, car il faudrait accéder à la table des utilisateurs pour la connexion/authentification et accéder à la table des produits pour tirer les détails du produit/prix dans le panier.
Au lieu de cela, diriez-vous que le modèle ShoppingCart est AUTONOME et ne concerne que l'ajout d'articles, le retrait d'articles, etc. du panier? La "logique" de l'utilisateur connecté serait alors vérifiée ailleurs: peut-être dans le contrôleur lui-même? Cela rendrait les contrôleurs très BUSY avec un peu de «logique métier», comme vérifier si l'utilisateur est connecté, vérifier si le panier est vide, etc. et le modèle devient juste un joli nom pour la table de base de données.
Ou peut-être, le fait même d'être connecté ou déconnecté fait partie d'un modèle UserAuthentication qui traite de telles fonctions. Ou peut-être avons-nous besoin d'un modèle UserPageState pour nous dire si l'utilisateur devrait être sur une page de connexion, ou une page de panier, ou une page de détail de produit?
Quelle est la meilleure conception MVC pour cette situation à votre avis?
Merci! J'ai ajouté un exemple de code http://pastebin.com/f203e3d31 basé sur les commentaires que vous m'avez donnés. S'il vous plaît jeter un oeil et laissez-moi savoir ce que vous pensez de la conception. Fondamentalement, un PageModel conserve une pile de quelles pages l'utilisateur devrait être redirigé vers. De cette façon, l'addItem() dans CartModel peut dire au contrôleur de se connecter d'abord, puis revenir à addItem() par la suite. Qu'en pensez-vous? – thorie