13 votes

Projet ASP.NET MVC et le dossier App_Code

Comment se fait-il que App_Code ne soit pas un choix dans le sous-menu Ajouter un dossier ASP.NET dans l'explorateur de solutions VS ? Je réalise que vous pouvez en créer un vous-même manuellement en renommant simplement un Nouveau Dossier, mais quel est le raisonnement ici ? N'est-ce pas là que vous êtes censé mettre les classes de type "utilitaire" ou "couche de service" ?

A propos d'un projet MVC. J'apprécie le fait qu'il y ait une référence à System.Configuration prête à l'emploi, contrairement aux projets ASP.NET Web Form par défaut.

21voto

davogones Points 5405

C'est probablement parce qu'un projet ASP.NET MVC est une application web plutôt qu'un site web. Dans un site web, les fichiers de classe sont compilés dynamiquement au moment de l'exécution et doivent se trouver dans le dossier App_Code. Dans une application Web, tout est compilé de manière statique et les fichiers de classe peuvent se trouver n'importe où dans votre application Web.

Comme l'a souligné David Brown, il est généralement recommandé de placer la définition des classes supplémentaires dans une bibliothèque de classes distincte, puis de la référencer dans votre application Web. Si vous écrivez des tests unitaires ou faites référence à vos classes à partir de fichiers de configuration, il peut être difficile, voire impossible, d'accéder à ces classes si elles sont définies uniquement dans votre application Web.

10voto

David Brown Points 14365

En général, je place les classes de la "couche de service" et de l'"utilitaire" dans un projet séparé et je l'ajoute comme référence à mon application web. Avec le framework MVC, je ne vois pas vraiment la nécessité de compiler les classes au moment de l'exécution.

10voto

Jason Sebring Points 4309

La vraie réponse est que Microsoft veut vous faire croire que vous avez besoin de VS pour faire du MVC. Cependant, pour convertir le projet en JIT pur qui est beaucoup plus facile à travailler...

Vous pouvez le faire de manière assez directe.

(1) Déplacez tous les dossiers contenant des fichiers de classe vers App_Code (laissez le dossier Views où il se trouve)
(2) Faire Global.asax sans avoir besoin d'un code derrière ou d'une référence d'héritage en supprimant ces attributs puis en plaçant

[script runat="server"] 
... place contents of code behind's class inner code 
[/script] 

et supprimer le code derrière pour de bon

(3) Dans Bin Supprimez la référence à la DLL du projet en veillant à conserver les autres DLL nécessaires à l'exécution de MVC.
(4) Supprimez les fichiers de solution et les dossiers de propriétés et d'obj.

Je le fais régulièrement pour nop MVC car il est beaucoup plus simple de travailler avec le volet web en JIT. Les développeurs qui ne comprennent pas cela ne travaillent pas dans les tranchées tous les jours sur de nombreux sites Web avec diverses corrections rapides personnalisées nécessaires. Les sites sur lesquels nous travaillons reçoivent des centaines de milliers de visites par jour, et l'utilisation du JIT n'entraîne aucune pénalité de performance après le choc initial.
Il semble que le moins soit le plus lorsqu'il s'agit du développement de petits sites web.

0voto

RitchieD Points 83

Pour ceux qui ne veulent pas d'un second projet/bibliothèque de classes et qui veulent juste un simple dossier pour quelques classes c#, je propose "App_Classes".

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