web-dev-qa-db-fra.com

Pourquoi Razor Pages est-il l’approche recommandée pour créer une interface utilisateur Web dans Asp.net Core 2.0?

Apprendre de nouvelles choses nécessite un investissement en temps, espace et énergie. J'apprends actuellement Asp.Net Core MVC 2.0. Cette vue d'ensemble des didacticiels ASP.NET Core indique:

Razor Pages est l'approche recommandée pour créer une interface utilisateur Web avec ASP.NET Core 2.0.

Cette information m'a troublé lorsque j'ai décidé d'arrêter d'apprendre Asp.net Core MVC et de commencer à apprendre Asp.net Core Razor Pages.

  • Pourquoi Razor Pages est-il l’approche recommandée pour créer une interface utilisateur Web dans Asp.net Core 2.0? 

Toutes les directions sont les bienvenues.

36

Razor Pages est optimisé pour les flux de travail basés sur des pages et peut être utilisé dans ces scénarios avec moins de pièces mobiles que les modèles MVC traditionnels. En effet, vous n'avez pas besoin de gérer les contrôleurs, les actions, les itinéraires, les modèles de vue et les vues (comme vous le feriez normalement). Au lieu de cela, votre itinéraire est basé sur des conventions et votre PageModel sert à la fois de contrôleur, d’action (s) et de ViewModel. La page, bien sûr, remplace la vue. De plus, vous n'avez pas besoin d'avoir autant de dossiers que vous le feriez dans MVC, ce qui simplifiera davantage votre projet.

De ASP.NET Core - Applications ASP.NET MVC simplifiées avec Razor Pages , article MSDN de septembre 2017 par Steve Smith :

[Pages de rasoir] fournissent 

  • un moyen plus simple d'organiser le code dans les applications ASP.NET Core, en maintenant la logique d'implémentation et les modèles de vue plus proches du code d'implémentation de la vue. 
  • Ils offrent également un moyen plus simple de commencer à développer des applications ASP.NET Core, 

Cet article contient davantage d'informations sur les raisons pour lesquelles Razor Pages sur MVC est utilisé pour les flux de travail basés sur des pages. Évidemment, pour les API, vous voudrez toujours utiliser des contrôleurs.

Edition par une tierce partie - inconvénients de l'organisation classique des dossiers MVC

ASP.NET Core - Slices pour ASP.NET Core MVC , un ancien article de MSDN de septembre 2016, explique pourquoi la convention classique de MVC visant à organiser les vues et le contrôleur peut présenter des inconvénients pour les projets plus volumineux. L'article donne un exemple de quatre concepts d'application peu liés: Ninjas, Plantes, Pirates et Zombies. L'article décrit un moyen de les structurer en dehors de la convention de dossier par défaut en organisant les fichiers dans des dossiers par fonction ou domaine de responsabilité. 

24
ssmith

De "Architecture d'applications Web modernes avec le noyau asp.net" ( pdf ici ):

MVC: À l'aide de contrôleurs et de vues, il était courant que les applications aient des contrôleurs très grands fonctionnant avec de nombreuses dépendances et modèles de vues différents et renvoyant de nombreuses vues Cela entraînait beaucoup de complexité et donnait souvent lieu à des contrôleurs qui ne suivaient pas Le Single Responsibility Principle ou Open/Closed Principles efficacement. 

Razor Pages résout ce problème En encapsulant la logique côté serveur pour une "page" logique donnée dans une application Web. Une page Razor qui n'a pas de logique côté serveur peut simplement consister en un fichier Razor (par exemple, «Index.cshtml»). Cependant, la plupart des pages non triviales de Razor auront un modèle de page associé Class, qui, par convention, porte le même nom que le fichier Razor avec une extension «.cs» (par exemple, «Index.cshtml.cs»). Cette classe de modèles de page combine les responsabilités d'un contrôleur et d'un ViewModel. Au lieu de gérer les demandes avec les méthodes d'action du contrôleur, les gestionnaires de modèles de page tels que «OnGet ()» sont exécutés Sont exécutés, ce qui rend la page associée par défaut. 

Les pages de rasoir simplifient le processus de création de pages individuelles dans une application ASP.NET Core, tout en fournissant toutes les fonctionnalités architecturales de ASP.NET Core MVC. Ils constituent un bon choix par défaut pour les nouvelles fonctionnalités basées sur les pages (Razor Pages offre un moyen beaucoup plus simple de créer des fonctionnalités d’application basées sur des pages, telles que les formulaires non SPA). 

Quand utiliser MVC:

Si vous construisez des API Web, le modèle MVC est plus logique que d’essayer d’utiliser Razor Pages. Si votre projet n’expose que les points de terminaison de l’API Web, vous devez idéalement commencer par le modèle de projet de l’API Web Sinon, il est facile d’ajouter des contrôleurs et des points de terminaison d’API associés à tout ASP.NET Coreapp. Vous devez également utiliser l'approche MVC basée sur les vues si vous migrez une application existante D'ASP.NET MVC version 5 ou antérieure vers ASP.NET Core MVC et que vous souhaitez le faire avec un minimum d'effort . Une fois la migration initiale effectuée, vous pouvez évaluer s’il est logique d’adopter Razor Pages pour les nouvelles fonctionnalités ou même pour une migration en gros.

Remarque: Que vous choisissiez de créer votre application Web à l'aide de vues Razor Pages ou MVC, votre application disposera de performances similaires et inclura la prise en charge de l'injection de dépendance, des filtres, de la liaison de modèle, validation, etc.


Mise à jour: Quelques autres raisons que j'ai lues sur ce github numéro commenté par scott sauber :

Nous utilisons Razor Pages pour un portail multi-locataire d’assurance maladie où les administrateurs des ressources humaines peuvent créer des rapports CRUD sur les données des employés, générer des rapports, télécharger des documents,. télécharger des documents, des relevés de facturation, etc. et les employés qui sont l’assuré peut voir les détails de son assurance maladie, le changer, télécharger des documents, etc.

Nous avons plus de 60 pages et je peux dire que pour HTML rendu par le serveur, je le ferai ne retournez jamais à MVC. C'est juste un meilleur ajustement pour le HTML rendu par le serveur applications. Ce n'est pas seulement pour des choses simples. L'assurance maladie domaine est intrinsèquement complexe et combinez cela avec le fait que c'est une application multi-locataire (nous vendons le produit à d'autres compagnies d'assurance), ce qui ajoute plus de complexité car l'application est hautement configurable en tant que différentes compagnies d'assurance font les choses un peu différemment.

Pourquoi l'utiliser?

  • Razor Pages est plus sécurisé par défaut. Razor Pages vous offre la validation AntiForgeryToken par défaut. De plus, vous optez pour quoi les propriétés que vous souhaitez lier au modèle via [BindProperty], ce qui limite votre exposition à des attaques excessives.

  • Razor Pages possède par défaut une meilleure structure de dossiers qui évolue mieux. Dans MVC, la structure de dossiers par défaut n’est tout simplement pas mise à l’échelle . Avoir des dossiers séparés pour les vues, les contrôleurs et souvent ViewModels quand tous les trois sont finalement étroitement couplés les uns aux autres est un énorme PITA pour travailler avec. Vous finissez par rebondir dans les 3 dossiers et naviguer un tas quand vous avez besoin d'ajouter ou de modifier une fonctionnalité. C'est horrible. C'est pourquoi j'ai préconisé les dossiers de fonctionnalités. Avec Razor Pages, votre PageModel (Controller + ViewModel) se trouvent dans le même dossier que votre fichier Vue. Vous pouvez simplement appuyer sur F7 pour basculer entre eux, ce qui est également super pratique.

  • Conduit à un code plus facile à maintenir et à l'échelle. Avec MVC, il était très facile de gonfler un contrôleur avec plus de 10 actions. Souvent, ceux-ci Les actions n'étaient même pas liées les unes aux autres de quelque manière que ce soit (sauf peut-être un Redirect entre les deux). Cela a fait naviguer dans le contrôleur pour trouver code très difficile. La situation empira s’il y avait des méthodes privées dans le Contrôleur aussi, ajoutant encore à la méthode bloat. Avec Razor Pages, il est presque impossible de gonfler votre modèle de page avec des fichiers non liés méthodes à votre page. Tout ce que vous mettez dans votre PageModel est lié à votre page.Le test unitaire est plus facile. Avec un contrôleur, vous pouvez avoir 8 actions et certaines de vos dépendances que vous avez injectées étaient uniquement liées à une ou deux actions. Ainsi, lorsque l’unité teste une seule action, soit vous besoin de se moquer de ceux-ci inutilement ou passer un null, les deux se sent grossier (cela peut être un peu résolu avec le modèle Builder). Avec Razor Pages, les dépendances que vous injectez sont liées à 100% à GET et POST actions avec lesquelles vous travaillez. Cela semble naturel.

  • Le routage est plus facile. Par défaut, dans Razor Pages, le routage correspond uniquement à la structure de votre dossier. Cela facilite la nidification des dossiers accomplir. Par exemple, toutes nos pages d’administration des ressources humaines se trouvent sous le Le dossier /Administrator et toutes les pages Employé sont sous le /Employee dossier. Nous pouvons autoriser un dossier entier et dire le personne doit être un administrateur pour accéder à n’importe quel sous-dossier de /Administrator, ce qui était beaucoup plus facile à faire qu'avec plusieurs Les contrôleurs qui composent les fonctionnalités de l'administrateur.

  • .

Mise à jour 2:.


Il s'agit d'une certaine complexité du modèle MVC, ne répond pas directement à la question mais peut être utile: Un responsable de l'ingénierie de Facebook, a déclaré ( ici ) pour leur code "suffisamment" volumineux et leur grande organisation, "MVC got très compliqué très rapidement », concluant que MVC ne s’adapte pas. La complexité du système devenait exponentielle chaque fois qu'ils tentaient d'ajouter une nouvelle fonctionnalité rendant le code «fragile et imprévisible». Cela devenait un grave problème pour les développeurs novices d'une base de code donnée, car ils craignaient de toucher au code de peur de le casser. quelque chose. Le résultat était MVC était en train de s'effondrer pour Facebook.

.

  enter image description here

24
S.Serpooshan

Microsoft revient à l’approche WebForms pour simplifier la structure de projet en faisant confiance au mantra "Convention sur la configuration", tout en masquant la configuration au développeur pour accélérer les choses. Mais il a le désavantage que tout sera mélangé à nouveau. Je ne ressemble pas à un geste intelligent pour organiser. Mais salut! Quelque chose de nouveau doit attirer l’attention du développeur sur Microsoft. 

Si votre page utilise une API Web MVC pour REStful, il est vraiment plus facile de n'utiliser que des pages Razor. Sinon, je vous recommanderais d’utiliser Core MVC.

Dans les projets de grande envergure, où le modèle et le contrôleur se trouvent dans le même fichier, la maintenance sera un cauchemar. Cela fonctionne bien pour les classes qui ne font que 2 propriétés de long, mais cela viole le principe Open Close de la POO. Vous devez concevoir et utiliser une architecture qui peut évoluer avec le temps (Extensible) tout en restant stable et logique (Aucune restructuration du projet), il suffit de l’étendre en utilisant le même schéma. 

5
Sterling Diaz

Les développeurs étaient sur les forums en 2013 et ont demandé: "Qu'est-ce que Microsoft veut dire, Silverlight n'est pas recommandé ... ???" Seulement cette fois, MVC va être déclaré mort et vive MVVM . Et vous pouvez probablement vous attendre à ce que MVC soit jeté au rebut, lentement, mais dans les 18 mois à venir, et tout votre temps d’apprentissage de MVC ira au même tas. De plus, MVVM semble facile, mais il faut un an pour bien le comprendre et le faire correctement.

0
daniel