Idéal Structure de Dossier pour .NET MVC
Quand j'ai commencé .NET Webforms je n'ai pas eu beaucoup de mal à trouver une structure de dossiers à suivre car VS vous propose de demande des dossiers comme "App_Code" et la plupart des app exemples mis "BLL", "DAL" à l'intérieur et ainsi de suite.
Mais maintenant, en MVC, chaque exemple, j'ai vérifier utilise une structure différente, pas comme les normes de ce temps et je n'ai pas trouvé une bonne solution sur Google ou ALORS.
Donc, peut-être que nous pouvons partager la façon dont nous organisons nos projets MVC, peut aider les autres à faire leur propre esprit. Voici la structure pour les petits et moyens projets, j'utilise:
App_Data
Areas
Admin
Controllers
Models
Views
MyAccount
Controllers
Models
Views
Content
Images
Scripts
Styles
Controllers
HomeController.cs
Helpers
ExtensionMethods //I.e. based on HtmlHelper, use "helper" suffix
MenuHelper.cs //to be called as html.Menu()
Utilities.cs //Other generic (static) libraries, no suffix used
Models
ViewModels //for passing models to Views
RegisterViewModel.cs //use "ViewModel" suffix
Customer.cs //to extend models like adding Model Validation
Repositories
CustomerRepository.cs //use "Repository" suffix
Services
CustomerService.cs //use "Service" suffix, to move code away from controllers
Views
Home
Index.cshtml
Register.cshtml
Shared //Site Layouts (Master templates), also put partials here
SiteLayout.cshtml
La vôtre?
- Peut-être-question de noob: j'ai été en utilisant ASP.NET MVC pour un long moment, je n'ai jamais rencontré
.cshtml
! Qu'est-ce que cela? 🙂 - C'est Rasoir.
- Oui, c'est rasoir, la nouvelle valeur par défaut du moteur d'affichage sur MVC3, est plus propre et rend le code plus readible, vous pouvez vérifier un blog de Scott Gu: weblogs.asp.net/scottgu/archive/2010/07/02/...
- Il semble que ce post vient d'abord pour une recherche sur "mvc 4 structure de dossier", mais la question et les réponses sont probablement les plus archaïques. Asp.Net MVC nécessite souvent une très strict de la structure de répertoire. Quelqu'un sait de toute les mises à jour sur un arbre idéal?
- La raison, vous avez pas trouvé un "arbre idéal" est la raison que j'ai posté ceci: il n'est pas un idéal, alors je vous suggère de nous partager la nôtre. Tout le monde tôt ou tard adopte l'un de ses propres. Je pense que c'est plus au sujet de faire un équilibre entre ce que l'MVC besoins pour les conventions (garder des dossiers comme les Contrôleurs, les points de Vue), l'adoption de normes communes qui sont acceptées (les dossiers de Modèles, de Services), puis en ajoutant votre propre saveur (j'ai maintenant diviser une solution dans des projets comme MyApp.De Base, MyApp.Web, MyApp.La localisation).
- Pourquoi avez - ma question qui est fondamentalement la même, comme cela s'est fermé comme "non constructif", quand ce n'est pas?
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé que cela simplifie le déploiement d'avoir le projet de site web contiennent uniquement du contenu (pas de code compilé).
Quelque chose comme:
Web.Projet de Site
Et déplacer tous les code compilé dans un autre projet:
Projet Web
Ensuite, vous pouvez traiter le tout dans le Web.Projet de Site comme devant être déployé, et à toutes les assemblées seront dans le Web.Site\bin.
De savoir si vous faites les simples de déploiement de xcopy, ou à l'aide de WiX pour créer un MSI package, cela va rendre la vie un peu plus facile.
Tant que c'est clairement où en sont les choses, il n'a pas beaucoup d'importance. Je pense que c'est juste une question de la cohérence au sein de votre organisation/groupe.
Je seconde les deux démarche de projet. Jimmy Bogard a un nice post sur l'approche ainsi (assurez-vous d'aller à travers tous les commentaires).
Personnellement, je trouve que quand je suis en train de travailler sur une partie d'une application que j'utilise les services connexes, les contrôleurs, les référentiels, etc.. et quand vous mettez chacun de ces fichiers dans un autre dossier, il peut s'avérer fastidieuse va-et-vient et les trouver. Après quelques jouer j'ai été suivant ce format:
AppName.Web.L'INTERFACE utilisateur
AppName.L'INTERFACE utilisateur.Core
Projet De Test
Je pense que cela dépend de la taille de votre projet si vous le décomposer davantage et d'utilisation de l'Interface et ViewModel les sous-dossiers. Son n'est pas parfait, mais je l'ai trouvé mailles mieux avec la façon dont je pense.
L'affaire peut également être fait pour mettre vos services et des référentiels dans un troisième projet (AppName.De base), laissant le AppName.Web.Projet de base de l'encapsulation Web ne concerne pièces (Attributs, des Contrôleurs. Viewmodel, etc..). De nouveau qui vraiment a trait à la complexité du projet.