Le principe du MVC
Voyons comment appliquer le design pattern MVC en trois étapes :
Du concept au modèle de données
Du modèle de données au contrôleur
Du contrôleur à la vue
Étape 1 : du concept au modèle de données
Lorsque vous créez une nouvelle application .NET MVC, comme pour toute autre application, vous commencez par un concept et une liste de besoins. Les applications MVC sont également axées sur les données. Cela signifie que l'application est conçue pour fonctionner avec un type ou un ensemble spécifique de données. Par conséquent, vous commencerez toujours par travailler sur le modèle de données de l'application.
Comme nous savons précisément ce que nous voulons réaliser, il ne nous reste qu'à traduire notre concept en un modèle de données que l'application peut utiliser.
Nous voulons que notre application Watchlist nous permette de saisir les titres de films et d'autres informations liées, noter les films, et enregistrer toutes ces informations pour les consulter par la suite. Nous souhaitons également pouvoir afficher la liste des films notés. Ils devraient peut-être être triés par note ou par date de visionnage. Nous devrions également pouvoir afficher uniquement les films qui n'ont pas encore été notés. Pour éviter que cette application ne devienne trop complexe, laissons de côté ces critères d'affichage. Nous n'allons pas créer de page distincte pour afficher tous les détails d'un film, nous ne cherchons pas à imiter Allociné !
Identification des entités (objets)
Commençons par ce qui est évident : quelles sont les principales entités de notre schéma conceptuel ? On pourrait dire qu'il y en a quatre :
Utilisateur : notre système comporte plusieurs utilisateurs.
Liste des films vus : chaque utilisateur possède une liste des films qu'il a vus.
Film : chaque liste contient plusieurs films.
Note : chaque film d'une liste est associé à une note.
Si cette application ne devait être utilisée que par un seul utilisateur, nous pourrions faire de la note un simple attribut de l'objet Film. Toutefois, l'application possédant plusieurs comptes d'utilisateur, chaque utilisateur possède sa propre liste de films et peut donc noter chaque film de sa liste. Alors, comment définir les relations entre ces entités ? Voici mes suggestions :
Chaque utilisateur dispose d'une seule liste de films.
Chaque liste contient plusieurs films.
Plusieurs utilisateurs peuvent noter le même film. Ainsi, la note doit être liée à la fois à l'utilisateur et au film.
Voici un diagramme approximatif du modèle jusqu'à présent. Gardez à l'esprit qu'il n'est pas exhaustif :
Bien. Vous avez une idée de ce à quoi le modèle pourrait ressembler, mais vous savez aussi qu'il n'est pas encore très précis ni complet. Nous allons voir dès à présent comme le lier à un contrôleur. Nous reviendrons sur le modèle dans le chapitre suivant.
Étape 2 : du modèle de données au contrôleur
Dans le modèle MVC, les contrôleurs sont des zones d'action. Ils représentent et gèrent les requêtes HTTP entrantes et les réponses sortantes. J'ai mentionné le pattern de route (domaine/contrôleur/action) du MVC. La partie contrôleur de la route (ou URL) est le nom du contrôleur, et l'action est le nom de la méthode du contrôleur qui crée la vue que l'utilisateur veut voir. Cela signifie qu'il existe une relation directe, de type one-to-one, entre un modèle et un contrôleur.
Prenons l'exemple de l'entité Film. Si vous construisez un contrôleur pour interagir avec vos objets Film, il sera probablement appelé FilmsController. Toutes les données traitées dans ce contrôleur seront liées à l'objet Film. Le contrôleur vous permettra d'ajouter, de modifier, de supprimer et de lister les films de la base de données en générant une vue (page HTML) correspondant à la requête HTTP.
Après avoir finalisé le modèle de données, vous allez générer automatiquement des contrôleurs et des vues pour chacune des classes C# qui le composent.
Étape 3 : du contrôleur à la vue
La vue est appelée par l'instruction return dans l'action du contrôleur :
return View();
Cette instruction appelle la méthode View de .NET MVC. Cette méthode recherche dans le dossier Views du projet en cours un fichier de vue dont le nom correspond à l'action et au contrôleur. Elle charge le fichier de disposition correspondant, puis lit le fichier de vue et exécute le code Razor qu'elle trouve tout en produisant le HTML brut. Elle construit ainsi un fichier HTML dynamique à partir des résultats et le retourne au navigateur en réponse à la requête originale.
Nous allons créer nos vues à l'aide de modèles génériques grâce à la génération automatique. Cependant, elles devront être personnalisées et affinées pour fonctionner efficacement.
Avantages des dispositions
Comme mentionné précédemment, les dispositions dans .NET MVC sont tout simplement géniales !
Elles vous permettent de diviser les pages HTML en blocs réutilisables. Tous les éléments communs (ceux qui apparaissent sur plusieurs pages, comme les menus, les barres de navigation, les en-têtes et pieds de page, les fenêtres de discussion, etc.) peuvent être placés dans un fichier de disposition, tandis que les éléments qui sont exclusifs à une page donnée constituent le fichier de vue spécifique de la page. Les deux fichiers sont ensuite fusionnés en réponse à une requête HTTP et livrés sous la forme d'un seul fichier HTML dynamique.
Dans un projet .NET MVC, il est possible de créer autant de dispositions personnalisées que nécessaire et de les affecter à des vues spécifiques. Vous pouvez même modifier la disposition en fonction de l'utilisateur qui demande la page. Cette personnalisation peut intervenir en fonction du rôle de l'utilisateur, ou même en fonction de l'utilisateur lui-même, si vous avez besoin de ce degré de précision.
Plus tard dans ce cours, je vous montrerai comment tirer le meilleur parti de vos dispositions et accélérer votre développement .NET MVC. Mais avant cela, revenons à la conception de notre modèle. Nous devons le compléter avant de pouvoir faire quoi que ce soit avec les contrôleurs, les vues et les dispositions.
En résumé
Dans ce chapitre, nous avons conçu une ébauche de notre modèle de données basée sur le concept de notre application Watchlist.
Nous avons identifié les entités que vous pourriez avoir besoin de créer pour former le modèle et avons vu comment créer des contrôleurs MVC pour gérer ces entités.
Nous avons également évoqué la relation directe ou one-to-one qui existe entre les contrôleurs et les modèles, ainsi que la relation entre les actions des contrôleurs (méthodes C#) et les vues MVC (pages .cshtml).
Enfin, nous avons abordé l'importance de l'utilisation des dispositions dans les applications .NET pour simplifier le développement et la maintenance future des vues.
Dans le prochain chapitre, nous allons affiner et compléter le modèle. Après cela, nous commencerons le codage.