Expliquer le contrôleur de vue du modèle

13

Mon expérience dans le développement de sites Web dynamiques se limite principalement aux servlets Java. J'ai utilisé Tomcat pour développer divers servlets Java, et je n'hésiterais pas à dire que je suis raisonnablement compétent avec cette technologie, ainsi qu'avec HTML / CSS / Javascript côté client pour le front-end.

Quand je pense à "site Web dynamique", je pense: l'utilisateur demande une URL avec une chaîne de requête, le serveur reçoit la requête, puis procède à la sortie HTML dynamique afin de répondre à la requête. Cela implique souvent une communication avec une base de données afin de récupérer les données demandées pour l'affichage. C'est fondamentalement l'idée derrière la doGetméthode d'un Java HttpServlet.

Mais de nos jours, j'entends de plus en plus parler de nouveaux frameworks tels que Django et Ruby on Rails, qui profitent tous de l'architecture "Model View Controller". J'ai lu divers articles qui expliquent MVC, mais j'ai du mal à vraiment comprendre les avantages. Je comprends que l'idée générale est de séparer la logique métier de la logique de l'interface utilisateur, mais je ne vois pas en quoi cela est vraiment différent de la programmation Web normale. La programmation Web, par sa nature même, vous oblige à séparer la logique métier (programmation côté serveur back-end) de la programmation UI (HTML côté client ou Javascript), car les deux existent dans des sphères de programmation entièrement différentes.

Question: Qu'est - ce que MVC offre sur quelque chose comme un servlet Java, et plus important encore , exactement c'est MVC et comment est - il différent de ce que vous le feriez normalement pour développer un site Web dynamique en utilisant une approche plus traditionnelle comme un servlet Java (ou même quelque chose de plus ancien comme CGI)? Si possible, lorsque vous expliquez MVC, veuillez fournir un exemple qui illustre comment MVC est appliqué au processus de développement Web et en quoi il est bénéfique.

Channel72
la source

Réponses:

7

Tout d'abord, je pense qu'il vaut mieux parler de l'architecture MVC, puis approfondir la façon dont vous programmez actuellement.

L'architecture MVC est un moyen d'organiser le flux de travail à l'intérieur d'un système sotfware, pensez-y comme un moyen en couches d'implémenter le comportement du système. Ces couches sont:

  1. Modèle : représente votre modèle de données, c'est le cœur du système où toutes les informations qui s'y rapportent doivent être localisées. Ainsi, par exemple: si vous envisagez de concevoir un jeu, vous aurez besoin de joueurs, de règles, d'obstacles et d'une logique liée aux interactions de ces éléments, tels que: les joueurs devraient être en mesure de trier les obstacles lorsqu'un ensemble de règles s'applique.

    Le modèle est la première chose à laquelle vous devriez penser, car il sera le centre de vos applications .

  2. Contrôleur : c'est là que la magie opère et où l'architecture en couches rencontre le paradigme orienté objet qu'elle était censée utiliser. Voici où vous implémentez la façon dont le système réagit lorsqu'un utilisateur d'application demande quelque chose à propos de l'application via l'interface utilisateur.

    Le contrôleur doit être en mesure de gérer les objets du modèle, d'effectuer des opérations avec eux pour obtenir ce que l'utilisateur a demandé, puis de déléguer le résultat à la couche de vue correspondante pour le restituer à notre utilisateur.

  3. Affichage : il s'agit du point de départ et d'arrivée des interactions utilisateur. Voici où vous définissez comment les utilisateurs interagissent avec l'application. De nos jours, les utilisateurs essaient généralement d'accéder, par exemple, aux applications Web à partir de différents types de médias tels que: téléphones mobiles, tables, ordinateurs, ordinateurs portables, etc.

    En général, chaque technologie a besoin d'un langage différent pour créer la vue, alors imaginez que votre modèle de données et la façon dont ce modèle interagit et la façon dont vous restituez ces interactions sont tous codés en dur, il n'y a absolument aucun moyen de réutiliser votre code d'une manière qui n'est pas CopyPaste . Le résultat est un code qui sent et beaucoup de temps perdu à adapter le système HOLE.

    La vertu d'avoir la vue dans une couche séparée, nous permet de travailler indépendamment du modèle sur lequel nous travaillons actuellement . Nous avons seulement besoin de savoir comment rendre la liste des objets que le contrôleur nous envoie. Comment l'a-t-il généré est complètement trivial

Donc, finalement, nous avons obtenu un modèle indépendant qui pourrait être adapté selon nos besoins (aujourd'hui, je dois gérer un jeu Monouser sans règles, demain je veux jouer avec des amis et maintenant son multiuser, etc.) cela ne dépend pas de la façon dont nous allons le rendre à l'utilisateur. Ensuite, un contrôleur qui capture les demandes des utilisateurs provenant d'une vue, traite les objets du modèle, puis rend les informations à la vue pour les rendre.

Revenons à la première question que vous avez posée: Comme vous pouvez le voir (j'espère) MVC est un moyen de faire les choses et non une TECHNOLOGIE pour créer des logiciels. Vous pouvez utiliser vos servlets java et implémenter une architecture MVC sous celle-ci.

Voici un exemple de site de questions-réponses utilisant une architecture MVC pour clarifier un peu entrez la description de l'image ici

guiman
la source
6

Pour répondre à ta question

What does MVC offer over something like a Java servlet

MVC est un modèle, pas une technologie. Ainsi, le modèle peut également être appliqué lorsque vous programmez avec des servlets.

Permettez-moi d'essayer d'expliquer le modèle MVC avec les servlets lui-même. Donc, ce que vous essayez de faire lorsque vous parlez d'appliquer MVC, séparez le modèle (la logique métier), la vue (la logique de présentation) et le contrôleur (le servlet du contrôleur qui délègue le contrôle à la logique métier appropriée).

Dans ce cas, MVC ne consiste pas seulement à séparer l'entreprise de la couche de présentation et de la couche contrôleur, mais la couche entreprise ne sait même pas qu'il existe un contrôleur ou une présentation.

Les principaux frameworks en Java comme Struts suivent ce modèle. Je pense que vous vous êtes trompé de concept. Vous pouvez en lire plus sur Internet.

Vinoth Kumar CM
la source
2

MVC est vraiment facile à comprendre, c'est juste un modèle de conception, cependant, j'ai vu que le plus difficile / supervisé est la partie Model.

  • Modèle : Vos données (pas votre base de données exclusivement !, le modèle peut même être un fichier ini ou xml, ou des données d'un service Web). Les classes de modèle servent à définir, assembler et gérer des données. Lisez l'excellent article intitulé " Le M dans MVC: pourquoi les modèles sont mal compris et non appréciés ". Le modèle doit être accessible uniquement par le contrôleur.
  • Vues : Votre code GUI (présentation). Ne devrait accéder qu'au contrôleur
  • Contrôleur : votre logique. Gère la communication entre le modèle et la vue.
dukeofgaming
la source
1

Le concept Model-View-Controller n'est pas nouveau. Cela a commencé avec Smalltalk vers 1979.

À la base, MVC est un moyen d'organiser les responsabilités de votre code afin qu'il soit modulaire, prévisible et robuste.

La séparation vous permet les libertés suivantes:

  • Capacité à faire évoluer le modèle sans affecter la logique d'application ni afficher les données
  • Capacité de changer la logique métier sans affecter le modèle (ex. Ajouter de nouvelles étapes, etc.)
  • Capacité à représenter le modèle de différentes manières

Avec soin, vous pouvez potentiellement concevoir le modèle et le contrôleur afin de pouvoir remplacer complètement une application de bureau par une application Web comme frontal.

Plus récemment, l'approche Ruby on Rails de MVC a introduit de nouveaux concepts qui ont été copiés dans presque tous les frameworks d'applications Web de style MVC. Cela comprenait les concepts de «Convention sur la configuration», le mappage des actions du contrôleur aux méthodes de classe et le routage des requêtes URL vers le code sous-jacent.

Berin Loritsch
la source