Guide du débutant sur l'architecture MVC en Java

Publié: 2018-04-10

Si vous êtes lié à la scène du développement Web, vous aurez très certainement rencontré l'acronyme "MVC" des centaines de fois, sinon plus. MVC est l'un des modèles de conception dont on parle le plus dans le monde de la programmation Web aujourd'hui, et à juste titre. Dans cet article, nous allons vous faire découvrir le monde de l'architecture MVC. Nous parlerons des bases de MVC, de ses avantages, et enfin, d'un code simple qui vous aidera à comprendre plus clairement l'implémentation de MVC en Java.

Table des matières

Qu'est-ce que l'architecture MVC exactement ?

Avant d'entrer dans les détails techniques, clarifions certaines choses - MVC n'est PAS un modèle de conception, c'est un moyen de structurer vos applications. Ces dernières années, les applications Web utilisent largement l'architecture MVC, et il est donc naturel de la confondre avec un modèle de conception exclusif aux applications Web. Cependant, disons que MVC a été décrit pour la première fois en 1979 - avant l'ère du WWW où il n'y avait pas de concept d'applications Web. L'architecture utilisée aujourd'hui pour les applications Web est une adaptation du modèle original.
En fait, cette architecture était initialement incluse dans les deux principaux frameworks de développement Web - Struts et Ruby on Rails. Ces deux environnements ont ouvert la voie à une majorité de frameworks Web qui sont venus plus tard - et donc la popularité de cette architecture n'a cessé d'augmenter.

Apprenez à créer des applications comme Swiggy, Quora, IMDB et plus

Le modèle architectural MVC suit une idée élémentaire - nous devons séparer les responsabilités dans toute application sur la base suivante :

  • Modèle : gère les données et la logique métier.
  • Afficher : présente les données à l'utilisateur chaque fois qu'il le demande.
  • Contrôleur : traite les demandes des utilisateurs et récupère les ressources nécessaires.

Chacun des composants a un ensemble délimité de tâches qui assure le bon fonctionnement de l'ensemble de l'application ainsi qu'une modularité complète. Examinons chacun de ces composants plus en détail.

Manette

Le contrôleur est comme la femme de ménage de l'application - il effectue la coordination entre le modèle et la vue pour répondre à une demande de l'utilisateur. Les demandes de l'utilisateur sont reçues sous forme de requête HTTP get ou post - par exemple, lorsque l'utilisateur clique sur n'importe quel élément de l'interface graphique pour effectuer une action.
La fonction principale d'un contrôleur est d'appeler et de se coordonner avec le modèle pour récupérer toutes les ressources nécessaires pour agir. Habituellement, à la réception d'une demande de l'utilisateur, le contrôleur appelle le modèle approprié pour la tâche en cours.

Modèle

Le modèle est tout simplement les données de notre application. Les données sont « modélisées » de manière à ce qu'elles soient faciles à stocker, à récupérer et à modifier. Le modèle est la façon dont nous appliquons des règles à nos données, qui représentent finalement les concepts gérés par notre application.
Pour toute application logicielle, tout est modélisé sous forme de données facilement manipulables. Qu'est-ce qu'un utilisateur, un livre ou un message pour une application ? Rien de vraiment, seulement des données qui doivent être traitées selon des règles précises. Par exemple, la date ne doit pas être supérieure à la date actuelle, l'e-mail doit être au format correct, le nom ne doit pas comporter plus de "x" caractères, etc.

Chaque fois qu'un utilisateur fait une demande au contrôleur, il contacte le modèle approprié qui renvoie une représentation des données de ce que l'utilisateur a demandé. Ce modèle sera le même pour une œuvre particulière, quelle que soit la manière dont on souhaite la présenter à l'utilisateur. C'est pourquoi nous pouvons choisir n'importe quelle vue disponible pour afficher les données du modèle.
De plus, un modèle contient également la logique pour mettre à jour le contrôleur concerné chaque fois qu'il y a un changement dans les données du modèle.

Voir

Comme son nom l'indique, la vue est responsable du rendu des données reçues du modèle. Il peut y avoir des modèles prédéfinis dans lesquels vous pouvez adapter les données, et il peut même y avoir plusieurs vues différentes par modèle en fonction des besoins.

Toute application Web est structurée en gardant à l'esprit ces trois composants de base. Il peut y avoir un contrôleur principal chargé de recevoir toutes les demandes et d'appeler le contrôleur spécifique pour des actions spécifiques. Comprenons mieux le fonctionnement d'une application web sous l'architecture MVC à l'aide d'un exemple.

Voyons un exemple

Prenons l'exemple d'une papeterie en ligne. L'utilisateur peut voir les articles, acheter, ajouter des articles au panier, ajouter des articles à la commande en cours ou même ajouter/supprimer des articles (s'il est l'administrateur).
Voyons maintenant ce qui se passera lorsqu'un utilisateur cliquera sur le titre "Stylos" pour voir la liste des stylos.
Notre application aura un contrôleur particulier pour gérer toutes les requêtes liées aux stylos. Disons qu'il s'appelle « pens_controller.php ». Nous aurons également un modèle qui stockera les données concernant les stylos que nous avons - appelons-le "pens_model.php". Enfin, nous aurons plusieurs vues pour présenter les données - une liste de plumes, un tableau affichant les plumes, une page pour modifier la liste, etc.
La figure suivante montre le flux complet de contrôle dès le moment où un utilisateur clique sur "stylos", jusqu'au moment où le résultat est rendu devant lui :

Tout d'abord, le "pens_controller.php" gère la requête de l'utilisateur (1) comme une requête GET ou POST. Nous pouvons également avoir un « index.php » qui est le contrôleur central qui appellera le « pens_controller » chaque fois que nécessaire.
Le contrôleur examine ensuite la demande et les paramètres et appelle le modèle requis - dans ce cas, "pens_model.php". Le contrôleur demande au modèle de retourner la liste des enclos disponibles (2).
Maintenant, le modèle recherche dans la base de données les informations nécessaires (3), applique des logiques si nécessaire et renvoie les données au contrôleur (4).
Le contrôleur sélectionne alors une vue appropriée (5) et présente les données (6 et 7). Si une demande provient d'un appareil portable, une vue adaptée à celui-ci sera utilisée, ou si l'utilisateur a sélectionné un thème particulier, sa vue sera choisie - et ainsi de suite.
Comment devenir un développeur Full Stack

Les avantages de l'architecture MVC

Un problème courant auquel sont confrontés les développeurs d'applications de nos jours est la prise en charge de différents types d'appareils. L'architecture MVC résout ce problème car les développeurs peuvent créer différentes interfaces pour différents appareils, et en fonction de l'appareil à partir duquel la demande est faite, le contrôleur sélectionnera une vue appropriée. Le modèle envoie les mêmes données quel que soit l'appareil utilisé, ce qui garantit une cohérence complète sur tous les appareils.
La séparation MVC isole magnifiquement la vue de la logique métier. Il réduit également la complexité de la conception d'applications volumineuses en gardant le code et le flux de travail structurés. Cela rend le code global beaucoup plus facile à maintenir, tester, déboguer et réutiliser.

Une implémentation simple de MVC en utilisant Java

Nous aurons les trois suivants :

    1. StudentObject : le modèle.

    1. StudentView : affichez la classe pour imprimer les détails sur la console.

  1. StudentController : un contrôleur qui stocke les données dans studentObject et met à jour StudentView en conséquence

Étape 1 : créer le modèle

 classe publique Étudiant {
   rouleau de chaîne privéNo ;
   nom de chaîne privé ;
   
   chaîne publique getRollNo () {
      retour rollNo ;
   }
   
   public void setRollNo ( Chaîne rollNo ) {
      cela . rollNo = rollNo ;
   }
   
   chaîne publique getName () {
      retourner le nom ;
   }
   
   public void setName ( Nom de la chaîne ) {
      cela . nom = nom ;
   }
}

Le code est explicite. Il se compose de fonctions pour obtenir / définir le numéro de rôle et les noms des étudiants. Appelons-le "student.java".
Étape 2 : Créer la vue

 classe publique StudentView {
   public void printStudentDetails ( String nom de l'étudiant , String No du rouleau de l'étudiant ){
      Système . dehors . println ( "Etudiant : " );
      Système . dehors . println ( "Nom : " + NomÉtudiant );
      Système . dehors . println ( "Roll No: " + studentRollNo );
   }
}

Il s'agit simplement d'imprimer les valeurs sur la console. Appelons cela "studentView.java".
Étape 3 : créer le contrôleur

 classe publique StudentController {
   Modèle étudiant privé ;
   vue privée StudentView ;
   public StudentController ( modèle étudiant , vue StudentView ){
      cela . modèle = modèle ;
      cela . vue = vue ;
   }
   public void setStudentName ( Nom de la chaîne ){
modèle . setName ( nom );
   }
   chaîne publique getStudentName (){
      modèle de retour . getName ();
   }
   public void setStudentRollNo ( String rollNo ){
modèle . setRollNo ( rollNo );
   }
   chaîne publique getStudentRollNo (){
      modèle de retour . getRollNo ();
   }
   public void updateView (){
vue . printStudentDetails ( modèle . getName (), modèle . getRollNo ());
   }
}

Appelez cela "StudentController.java". Un coup d'œil rapide vous dira que ce contrôleur est juste responsable d'appeler le modèle pour obtenir/définir les données, puis de mettre à jour la vue.
Voyons maintenant comment tout cela est lié.
Étape 4 : Créer le fichier Java principal

 classe publique MVCPatternDemo {
   public static void main ( Chaîne [] args ) {
      //récupérer le dossier de l'étudiant en fonction de son numéro de rôle dans la base de données
      Modèle étudiant = retriveStudentFromDatabase ();
      // Créer une vue : pour écrire les détails des étudiants sur la console
      Vue StudentView = nouvelle StudentView ();
      Contrôleur StudentController = new StudentController ( modèle , vue );
contrôleur . mise à jourVue ();
      //mettre à jour les données du modèle
contrôleur . setStudentName ( "Jean" );
contrôleur . mise à jourVue ();
   }
   Étudiant statique privé retriveStudentFromDatabase (){
      Étudiant étudiant = nouvel étudiant ();
étudiant . setName ( "Robert" );
étudiant . setRollNo ( "10" );
      étudiant de retour ;
   }
}

Cela s'appelle "MVCPatternDemo.java". Comme vous pouvez le voir, il récupère les données des étudiants à partir de la base de données ou d'une fonction (dans ce cas, nous utilisons une fonction pour définir les valeurs) et les transmet au modèle Student. Ensuite, il initialise la vue que nous avions créée précédemment.
De plus, il initialise également notre contrôleur et le lie au modèle et à la vue. La méthode updateView() fait partie du contrôleur qui met à jour les détails de l'étudiant sur la console.
Étape 5 : Testez le résultat
Si tout se passe bien, le résultat devrait être :

 Élève:
Nom : Robert
Numéro de rouleau : 10
Élève:
Nom : Jean
Numéro de rouleau : 10

Si vous obtenez ceci en sortie, félicitations ! Vous avez réussi à implémenter l'architecture MVC à l'aide de Java, mais pour une application simple. Aussi simple soit-elle, cette application suffit à démontrer les pouvoirs de l'architecture MVC.
15 questions d'entretien MVC incontournables du printemps

Emballer…
Après tant de choses dites et faites, il est difficile de mettre davantage l'accent sur la puissance de l'architecture MVC dans n'importe quelle application Web/de bureau de nos jours. Il fournit un tout nouveau niveau de modularité à votre code, ce qui le rend beaucoup plus lisible et maintenable. Ainsi, si vous souhaitez évoluer vers de nouveaux sommets dans votre carrière de développeur d'applications, la maîtrise de l'architecture MVC et de son fonctionnement devrait être votre priorité absolue.

Inscrivez-vous à des cours de génie logiciel dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.

Laissez un commentaire et faites-nous savoir comment vous aimez cet article!

Devenir Développeur Full Stack

UpGrad et diplôme PG de l'IIIT-Bangalore en développement de logiciels
Postulez maintenant pour une maîtrise en génie logiciel