Quelle est l'utilisation du Modèle MVC? Est-il réellement utile?
Je suis nouveau dans ce, alors pardonnez-moi. J'ai été en utilisant un framework MVC dans un couple de projets ces derniers temps, et après un certain temps, je suis désabusé dans la perception de l'utilité du Modèle MVC.
- Je obtenir de l'utilité de les Contrôleurs et les Vues, je sais que la séparation entre la logique et la présentation est importante pour rendre le code plus maintenable à l'avenir, bien que pas nécessairement plus rapide ou plus robuste.
Si toute logique devrait être placé à l'intérieur du contrôleur, en premier lieu, je ne vois pas l'utilité du Modèle, en particulier l'Enregistrement. Nous avons déjà une langue qui est si robuste et facile à utiliser pour communiquer avec la base de données, ai-je le droit? Il est appelé SQL. Pour moi, quand les modèles sont implémentés comme des actifs-enregistrement, son utilité dépend de si oui ou non vous voulez que votre application pour s'adapter à de multiples bases de données.
Donc ce que je demande, si vous êtes seulement en utilisant une base de données, pourquoi s'embêter avec des Modèles et Active-Dossiers? Pourquoi ne pas simplement utiliser le SQL? Pourquoi la couche supplémentaire de complexité? Avez-vous les gars avez des études de cas de la vie réelle des histoires où les modèles peuvent vraiment faire les choses bien mieux que de simplement à l'aide de la classe de base de données et SQL-loin?
Encore une fois, je suis désolé si je semble être si ignorant, mais je ne sais vraiment pas pourquoi les Modèles sont importantes. Merci de répondre.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous êtes en supposant qu'un modèle de couche nécessairement utilise une sorte de l'ORM, pour résumé SQL loin. Ce n'est pas vrai: vous pouvez créer un modèle de couche, qui est faiblement couplées à partir du Contrôleur de couche, mais étroitement couplés à un SGBD, et donc éviter d'utiliser un ORM.
Il y a quelques ORM bibliothèques, comme la mise en veille prolongée (Java), NHibernate (.NET), la Doctrine (PHP) ou ActiveRecord-Rails (Ruby) qui peut vraiment générer tous les instructions SQL pour vous; mais si vous pensez que l'ORM est inutile, et si vous voulez définir toutes les instructions SQL à la main, ne pas les utiliser.
Encore, à mon humble avis cela ne PAS dire que vous devez placer tous vous DB logique à l'intérieur de la couche contrôleur. Cela s'appelle le "contrôleur de graisse" approche, et c'est une route qui conduit, à plusieurs reprises, à des ballonnements, difficile à maintenir le code. Vous pouvez l'utiliser pour de simples CRUD projets, mais rien au-delà qui demande l'existence d'un véritable "Modèle".
Vous semblent se soucier de la MVC. S'il vous plaît, lire aussi quelque chose à propos de TDD. Un homme sage a dit une fois "l'héritage de code est un code sans tests". Lorsque vous apprenez à automatiser les tests unitaires sont aussi important que le "vrai" code, vous comprendrez pourquoi il y a tellement de couches dans une application d'entreprise, et pourquoi votre Modèle de couche doit être séparé du Contrôleur. Un bloc de code qui essaie de tout faire (présentation, logique métier, la persistance des données) ne peut tout simplement pas être facilement testés (ni corrigés par la voie).
Modifier
"Modèle" est un peu floue terme. En fonction de l'endroit où vous regardez, il peut signifier quelque chose de légèrement différent. Par exemple, PHP e Ruby programmeurs utilisent fréquemment comme un synonyme à un Active Record, qui n'est pas exact. Certains autres développeurs semblent croire qu'un "modèle" n'est qu'une sorte de DTO, qui n'est pas droit.
Je préfère utiliser la définition du modèle comme on le voit dans Wikipédia:
De sorte que le Modèle est le plus grand, le plus important de la couche dans la plupart des applications MVC. C'est pourquoi il est généralement divisé en sous-couches: le Domaine, le Service, l'Accès aux Données et ainsi de suite. Le Modèle est généralement exposés à travers le Domaine, car c'est là où vous trouverez les méthodes que votre contrôleur d'appel. Mais la couche d'Accès aux Données appartient au "Modèle" de trop. Tout ce qui est lié à la persistance des données et logique d'entreprise lui appartient.
Ce n'est pas un ignorant question à tous! Juste le fait que vous êtes en demandant au lieu de simplement ignorer l'ensemble de la MVC de la théorie et de faire comme vous s'il vous plaît est agréable. 🙂
Pour répondre à votre question: sur le plan conceptuel, les Modèles fournissent simplement une belle abstraction de vos données. Au lieu de penser en termes de "comment puis-je écrire cette jointure interne pour obtenir tous les champs dont j'ai besoin", les modèles vous permettent de penser en termes de "comment sont mes objets d'application liés les uns aux autres, comment interagissent-ils et comment puis-je obtenir les données dont j'ai besoin d'eux".
De la même manière que les Vues et les Contrôleurs de vous aider à séparer la présentation de la logique, Modèles vous aider à séparer la logique de l'application (à partir d'un point de vue utilisateur, de toute façon) à partir des détails de l'endroit où vos données provient en fait et comment il est représenté en interne.
Pour donner un exemple plus spécifique (si pas complètement réaliste): en théorie, on pourrait écrire l'ensemble de votre demande dans un sens vous avez récupéré toutes les données grâce à des requêtes SQL. Mais plus tard, vous avez réalisé que vous vouliez utiliser certains noSQL (CouchDB, etc) moteur parce que vous aviez besoin de mise à l'échelle horizontale.
Avec les modèles (et d'un cadre permettant d'utiliser les deux types de stockage, bien sûr :-)) vous n'auriez pas à vous soucier des détails de toutes vos données importantes sont déjà représentés de façon générique par le biais de vos modèles et les deux vues et les contrôleurs peuvent agir sur cette représentation.
Sans eux, vous seriez probablement avoir à réécrire une grande partie du code pour s'adapter à votre récupération de données vers le nouveau serveur.
Et que c'est juste sur le forage de stockage. Avec pure SQL, il est beaucoup plus difficile de définir les interactions entre vos objets d'application (c'est à dire la logique métier) parce que vous venez de ne pas le faire en SQL (probablement, de toute façon).
Ce n'est pas une parfaite explication (loin de là), mais j'espère que cela aide.
Dans la plupart des situations de la vie réelle, les données qui proviennent de l'utilisateur de ne pas aller directement dans la base de données.
Il doit souvent être validé, filtré, ou transformé.
Le rôle de la couche de modèle est généralement pour s'assurer que les données arrivent bien dans le backend de store (généralement de la base de données) par l'exécution de ces opérations, qui ne devrait pas être la responsabilité du contrôleur (skinny contrôleur, modèle de graisse), et pas de la responsabilité du moteur de base de données elle-même.
En d'autres termes, le Modèle de couche est responsable - ou "sait" comment les données doivent être traitées.
Plus modernes MVC cadres de fournir des moyens pour spécifier les contrats de plus de la validité des données, telles que des Rails.
Voici un exemple de http://biodegradablegeek.com/2008/02/introduction-to-validations-validation-error-handling-in-rails/:
Ici, plusieurs de la de la validité des données les exigences ne peuvent pas être traitées par la base de données, et ne devraient pas être traitées dans les contrôleurs, car toute modification de ces exigences pourrait briser le code à plusieurs endroits.
Par conséquent, le modèle est le meilleur endroit pour s'assurer que les données cohérent pour votre domaine.
Il y a beaucoup plus à dire à ce sujet, mais j'ai envie d'aborder un point qui me semble important, motivés par l'expérience pratique 🙂
Les modèles doivent contenir toute votre logique. Le contrôleur est responsable uniquement avec la logique liée à l'interaction de l'utilisateur. Tout le domaine des fonctionnalités (ce qui est connu comme "logique d'entreprise") doit être placé dans le modèle et découplée de contrôleur de code. Comme cela, vous pouvez obtenir une meilleure séparation des préoccupations et de la réutilisabilité du code.
Par exemple, disons que vous écrivez une application pour permettre aux utilisateurs d'entrer des informations au sujet de vis à vis et de recevoir de l'alimentation pratique.
D'une part, vous pouvez mettre le code lié à la transformation de l'utilisateur fourni des données dans une liste de pratique de l'alimentation dans le modèle de la partie. Cela comprend l'accès à la base, mais aussi tous les calculs , algorithmes et de traitement liés au problème en question (le problème de domaine).
D'autre part, vous mettez le code pour connecter les utilisateurs, afficher un formulaire, de recueillir les données de formulaire, de le valider, dans le contrôleur. De cette façon, par exemple, vous pourriez ajouter plus tard une api pour votre application (qui utilise un code différent pour l'authentification, l'obtention de données de l'utilisateur, la validation, etc.) et de réutiliser le code pour générer les résultats (à partir du modèle).
C'est juste un exemple de ce que le modèle est bon pour.
J'ai toujours en rapport avec le Modèle de données indépendamment de l'endroit où il est présent, ou la façon dont il est représenté. Dans MVC V affiche les données et les C gère le changement. Même si vous avez toutes les données doivent être présentées sur l'écran dans une table de hachage à l'intérieur de votre contrôleur; que HashMap sera appelé le Modèle.