73 votes

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

L'apprentissage de nouvelles choses a besoin d'un investissement de temps, d'espace et d'énergie. Je suis actuellement en apprentissage Asp.Net Core, MVC 2.0. Cette ASP.NET de Base des tutoriels de présentation les états:

Rasoir Pages est l'approche recommandée pour créer une INTERFACE Web avec ASP.NET Core 2.0.

Cette information me confond à décider si je dois arrêter d'apprentissage Asp.net Core, MVC et commencer à apprendre Asp.net Base de Rasoir Pages.

  • Pourquoi est-Rasoir Pages de l'approche recommandée pour créer une INTERFACE utilisateur Web dans Asp.net Core 2.0?

Toutes les directions sont les bienvenus.

68voto

saeed serpooshan Points 356

De la "création de l'Architecture moderne des applications web avec asp.net de base" (pdf ici):

MVC: en Utilisant les contrôleurs et les vues, il était courant pour les applications ont très grand contrôleurs qui a travaillé avec de nombreuses dépendances et les modèles de vue et est retourné plusieurs différents points de vue. Cela a entraîné beaucoup de complexité et aboutit souvent à des contrôleurs qui n'ont pas suivi l' Single Responsibility Principle ou Open/Closed Principles efficacement.

Rasoir Pages les adresses de cette question par l'encapsulation de la logique côté serveur pour une logique de "page", dans une application web. Un Rasoir Page qui n'a pas de logique côté serveur peut simplement se composent d'un fichier de Rasoir (eg. "L'Index.cshtml"). Cependant, la plupart des non-trivial de Rasoir Pages sont associés à un modèle de page de la classe, qui par convention est le même nom que le fichier de Rasoir avec un ".cs" extension (par exemple, "l'Index.cshtml.cs"). La présente page de la classe du modèle combine les responsabilités d'un Contrôleur et d'un ViewModel. Au lieu de traiter les demandes avec le contrôleur des méthodes d'action, modèle de la page gestionnaires comme "OnGet()" sont exécuté, ce qui rend leur page associée par défaut.

Rasoir pages de simplifier le processus de création pages individuelles dans un ASP.NET Core application, tout en offrant toutes les caractéristiques de l'architecture de ASP.NET Core, MVC. Ils sont un bon choix par défaut pour la nouvelle page basée sur la fonctionnalité.

Lors de l'utilisation de MVC:

Si vous êtes en train de construire des Api web, le modèle MVC est plus judicieux que d'essayer d'utiliser de Rasoir Pages. Si votre projet ne fera que révéler l'API web points d'accès, vous devrait idéalement commencer à partir de l'API Web du projet modèle, mais sinon il est facile d'ajouter des contrôleurs et des API associée à tout les points de terminaison ASP.NET de Base app. Vous devez également utiliser le point de vue basé sur MVC approche si vous êtes de la migration d'une application existante à partir de ASP.NET MVC 5 ou version antérieure à ASP.NET Core, MVC et vous souhaitez le faire avec le moins de des efforts. Une fois que vous avez fait de la migration initiale, vous pouvez évaluer si il est logique d'adopter Rasoir Pages pour de nouvelles fonctionnalités ou même comme un marché de gros de la migration.

Note: Si vous choisissez de créer votre application web à l'aide de Rasoir Pages ou MVC vue, votre application sera des performances similaires, et comprend le soutien pour l'injection de dépendances, de filtres, de la liaison de modèle, validation, etc.


Mise à jour: Quelques raisons de plus j'ai lu sur ce github question commenté par scott sauber:

Nous sommes à l'aide de Rasoir Pages pour un [complexe] l'Assurance-Santé de portail... Nous avons+ de 60 pages et je peux dire que pour le Serveur de rendu HTML, je ne vais jamais revenir à la MVC. Il n'est également pas juste pour les choses simples. L'Assurance-Santé de domaine est en soi complexe et combinez cela avec le fait que c'est un multi-locataire application (nous vendre le produit à d'autres compagnies d'assurance), ce qui ajoute de la complexité à mesure que l'application est hautement configurable que les différentes compagnies d'assurance de faire les choses un peu différemment.

Pourquoi l'utiliser?

  • Rasoir Pages est plus sécurisé par défaut. Rasoir Pages vous donne AntiForgeryToken de validation par défaut. De Plus, vous optez pour les propriétés que vous souhaitez être modèle lié par [BindProperty] ce qui limite l'exposition à la sur-l'affichage des attaques.

  • Rasoir Pages a une meilleure structure de dossier par défaut qui s'adapte mieux. Dans MVC, le dossier par défaut de la structure n'est tout simplement pas à l'échelle. Des dossiers séparés pour les Vues, Contrôleurs, et souvent Viewmodel quand tous les trois sont, en définitive, étroitement liés l'un à l'autre est un énorme pain PITA de travailler avec. En fin de compte vous rebondir à tous les 3 dossiers et la navigation d'un tas à tout moment vous avez besoin d'ajouter ou de modifier une fonction. C'est horrible. C'est pourquoi j'ai plaidé pour la Fonctionnalité de Dossiers. Avec Rasoir Pages, votre Pagemodèle (Contrôleur + ViewModel) sont dans le même dossier que votre point de Vue. Vous pouvez appuyez simplement sur la touche F7 pour basculer entre elles qui est aussi super pratique.

  • Conduit à une plus facile à gérer le code qui s'adapte mieux. Avec MVC, il a été super facile à gonfler un Contrôleur avec+ de 10 Actions. Souvent, ces Actions ne sont même pas liés l'un à l'autre dans tous les cas (sauf peut-être une Redirection entre les deux). De ce fait naviguer le Contrôleur de trouver un code très difficile. C'était pire que si il y avait des méthodes privées dans le Contrôleur de trop, ajoutant ainsi à la méthode de la météorisation. Avec Rasoir de Pages, il est presque impossible de gonfler votre Modèle de Page sans rapport avec les méthodes de votre page. Tout ce que vous mettez dans votre Pagemodèle est lié à votre Page.

  • Le Test unitaire est plus facile. Avec un Contrôleur, vous pouvez avoir 8 Actions et de certains de vos dépendances vous injecter en étaient uniquement liées à une ou deux Actions. Ainsi, lorsque le test d'unité d'une même Action soit vous en avez besoin pour se moquer de ceux inutilement ou de passer un nul, qui se sent brut (cela peut être résolu un peu avec le Générateur de pattern). Avec Rasoir Pages, les dépendances que vous injectez dans 100% sont liés à OBTENIR et les actions POST vous travaillez avec. Il se sent juste naturel.

  • Le routage est plus facile. Par défaut dans les Pages Razor, routage seulement correspond à votre structure de dossier. Cela fait de l'imbrication des dossiers de manière plus facile à accomplir. Par exemple, l'ensemble de nos RH pages d'administration sont sous l' /Administrator le dossier et tous les Employés pages sont sous l' /Employee le dossier. Nous pouvons autoriser un dossier entier et dire que la personne doit être un Administrateur pour obtenir à n'importe quel sous-dossier /Administrator, ce qui était plus facile à faire qu'avec les Contrôleurs multiples qui composent les fonctionnalités d'Administrateur.

Je pense que c'est le grand truc.


Mise à jour 2:

C'est au sujet d'une certaine complexité du modèle MVC, ne répond pas directement à la question, mais peut être utile: Un ingénieur chez Facebook, a dit (ici) pour leur "suffisamment" de grandes bases de programmation et organisation de grande taille, "MVC est devenu vraiment compliqué, très rapidement," la conclusion que le MVC n'est pas à l'échelle. La complexité du système est exponentielle chaque fois qu'ils tentaient d'ajouter une nouvelle fonctionnalité du code "fragile et imprévisible." C'était à devenir un sérieux problème pour les développeurs de nouvelles à un certain code de base parce qu'ils avaient peur de toucher au code de peur qu'ils pourraient se casser quelque chose. Le résultat a été MVC était en train de s'effondrer pour Facebook.

enter image description here

46voto

ssmith Points 1655

Rasoir Pages sont optimisées pour la page basée sur les flux de travail et peut être utilisé dans le cadre de ces scénarios avec moins de pièces mobiles que les traditionnels modèles MVC. C'est parce que vous n'avez pas besoin de traiter avec des Contrôleurs, des Actions, des Itinéraires, des ViewModels, et points de Vue (comme vous le feriez habituellement). Au lieu de cela, votre parcours est fondée sur une convention, et votre Pagemodèle sert de Contrôleur, de l'Action(s), et ViewModel tout en un. La page, bien sûr, remplace la Vue. Vous aussi vous n'avez pas à avoir autant de dossiers que vous le feriez dans MVC, la poursuite de la simplification de votre projet.

À partir de ASP.NET Core - plus Simple ASP.NET MVC Apps avec les Pages Razor, un Sept. 2017 MSDN article par Steve Smith:

[Rasoir Pages] fournir

  • une façon plus simple d'organiser le code à l'intérieur ASP.NET les applications de Base, en gardant la mise en œuvre de la logique et de modèles de vue plus proche de la vue de mise en œuvre du code.
  • Ils offrent également un moyen plus simple pour commencer à développer ASP.NET applications de Base,

Cet article a pour plus d'informations sur pourquoi utiliser de Rasoir Pages sur MVC pour la mise en page de flux de travail. Évidemment, pour les Api, vous aurez envie d'utiliser des Contrôleurs.

3ème partie modifier - les inconvénients de classique MVC dossier de l'organisation

ASP.NET de Base - Fonction de Tranches de ASP.NET Core, MVC, plus d'un article MSDN de Sept. En 2016, explique pourquoi le classique MVC convention d'organiser des points de vue et contrôleur peut avoir des inconvénients pour les grands projets. L'article donne un exemple de quatre vaguement liés, l'application de concepts: les Ninjas, les Plantes, les Pirates et les Zombies. L'article présente une structure hors du dossier par défaut de la convention par l'organisation des fichiers dans des dossiers par fonction ou par domaine de responsabilité.

10voto

Sterling Diaz Points 316

Microsoft est de retour à la WebForms approche pour simplifier la structure du projet, avoir confiance dans la "Convention over configuration" mantra, tout en cachant la configuration de développeurs pour rendre les choses plus vite. Mais il a le disavantage que tout sera mélangé à nouveau. Je ne ressemble pas à une initiative intelligente pour l'organisation. Mais... Hey! Quelque chose de nouveau doit attirer l'attention de la dev vers Microsoft.

Si votre page utilise une API Web MVC pour le repos, il est vraiment plus facile de simplement utiliser de Rasoir pages. Si pas, je vous recommande d'utiliser Core MVC.

Dans les projets d'envergure, où le modèle et le contrôleur sont ensemble dans le même fichier, l'entretien va être un cauchemar. Il fonctionne bien pour les clases qui sont juste 2 propriétés de long, mais il viole l'Ouvrir Fermer Principe de la programmation orientée objet. Vous devez concevoir et utiliser une architecture qui peut évoluer avec le temps (Extensible) et toujours être stable et logique(Pas de reestructuring le projet), il suffit de l'étendre à l'aide du même modèle.

3voto

À partir d'une Architecture point de vue de la navigation pour le code etc. peut être définie dans une Hiérarchie façon de structurer votre Solution. Je voudrais savoir comment nous le faisons dans un Rasoir pages en fonction de la solution.

Ce que sur la prise en charge de Partage et de Regroupement des actions dans les pages Razor. Si vous regardez des Contrôleurs MVC, vous pouvez voir que vous pouvez regrouper les actions du contrôleur en fonction de leur fonctionnalité. On pourrait dire la page d'Accueil est une telle fonctionnalité. Ensuite, vous avez un contrôleur HomeController à Propos de() et (), mais avec Rasoir Pages ce serait différent pages. Peut-être que vous avez un gros HomeController avec disons 5 autres points de Vue à elle. Ils peuvent tous être regroupés dans le même HomeController.

Un Contrôleur a deux choses d'un Rasoir Pages n'ont pas:

  1. Partage: Vous pouvez partager les actions du Contrôleur entre les différentes pages, parfois, les actions du contrôleur ne sont pas liés à une seule page, mais peut être partagé entre plusieurs pages. Rappelez-vous que les actions du Contrôleur peut également renvoyer des Données (JSON/XML/etc). Parfois, ce qu'ils de retour peuvent être utilisées par les différentes pages de trop.
  2. Regroupement: Vous pouvez regrouper les actions du Contrôleur ensemble dans un seul Contrôleur. Ok, si vous êtes un fan de la petite Contrôleur de fichiers que vous n'aurez pas le faire. Je ne. Je groupe mes Contrôleurs basés sur la fonctionnalité. Qui rend la navigation beaucoup plus facile.

Qu'est-ce que le Rasoir pages de cela: l'Utilisation de répertoires je pense:

  • Groupement: Si nous avons le contrôleur HomeController, puis nous avons pu faire un sous-répertoire à la Maison avec les pages qu'il contient.

Question: Pour une simple Maison qui serait assez. Mais disons que nous avons une XController qui utilise pour toutes les actions le même Référentiel. Vous pourriez initialiser ce Référentiel dans l'Initialiseur de la fonction de XController. Mais pour les pages dans le X sous-répertoire que vous avez à faire que pour tout X actions à nouveau. C'est que SEC?

  • Partage: Vous pourriez faire une "Partager" sous-répertoire et sous le, répertoires avec des fonctionnalités qui devraient être partagés entre les pages.

Question: Si vous regardez mon correctif, vous pouvez voir que j'utilise des répertoires pour résoudre le Partager et le problème de Groupement de Rasoir pages.

Comment voulez-vous faire cela?

ou...sont les pages Razor être pour de simples sites web, cela pourrait être la conclusion de cette version de Rasoir pages.

-2voto

daniel Points 9

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, c'est que MVC va être déclaré mort et vive MVVM. Et vous pouvez probablement vous attendre à ce que MVC soit jeté au rebut, lentement, mais accéléré dans environ 18 mois à partir de maintenant, et tout le temps que vous aurez passé à apprendre à MVC ira à ce même tas. De plus, MVVM semble facile, mais il faut un an pour bien le comprendre et le faire correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X