asp.net mvc - vistas - Una estructura de carpeta ideal para.NET MVC
plantillas mvc visual studio 2015 (3)
Cuando comencé en .NET Webforms, no tuve muchos problemas para encontrar una estructura de carpetas que seguir, ya que VS le ofreció carpetas de aplicaciones como "App_Code" y la mayoría de los ejemplos de aplicaciones ponen "BLL", "DAL" dentro, etc.
Pero ahora en MVC, cada ejemplo que verifico usa una estructura diferente, como esta vez sin estándares y no he encontrado una buena solución en Google o SO.
Entonces, tal vez podamos compartir cómo organizamos nuestros proyectos MVC, y podemos ayudar a otros a tomar sus propias decisiones. Aquí está la estructura para proyectos pequeños a medianos que uso:
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
¿Qué tal el tuyo?
Descubrí que simplifica la implementación para que el proyecto del sitio web contenga solo contenido (sin código compilado).
Algo como:
Proyecto web.Site
Content
Images
Css
Scripts
Views
web.config
Y mueva todo el código compilado a otro proyecto:
Proyecto web
Controllers
Filters
Models
...
Luego, puede tratar todo lo que se encuentre dentro del proyecto Web.Site como si fuera necesario desplegarlo, y todos los ensamblajes requeridos estarán en Web.Sitio / bin.
Ya sea que esté realizando una implementación sencilla de xcopy o use WiX para crear un paquete MSI, esto hará la vida un poco más fácil.
Mientras esté claro dónde están las cosas, no importa mucho. Creo que es solo una cuestión de ser coherente dentro de su organización / grupo.
Yo segundo el enfoque de dos proyectos. Jimmy Bogard también tiene un buen post sobre el enfoque (asegúrate de revisar todos los comentarios).
Personalmente, encuentro que cuando estoy trabajando en una parte de una aplicación, uso servicios relacionados, controladores, repositorios, etc., y cuando pones cada uno de estos archivos en una carpeta diferente, puede resultar tedioso ir y venir y encontrarlos. . Después de algunos juegos he estado siguiendo este formato:
AppName.Web.UI
Scripts
Content
View
AppName.UI.Core
Attributes
Filters
Formatters
Helpers
Models
Company
Interfaces
IController.cs
IRepository.cs
IService.cs
ViewModels
ViewModel1.cs
ViewModel2.cs
Controller.cs
Repository.cs
Service.cs
User
....
Plugins (mailchimp, Twitter OAuth, etc..)
Global.asax (define all the code here rather than in the UI project)
Proyecto de prueba
...
Creo que depende de cuán grande sea su proyecto en cuanto a si se desglosa aún más y usa las subcarpetas Interface y ViewModel. No es perfecto, pero he encontrado que combina mejor con la forma en que pienso.
El caso también se puede hacer para colocar sus servicios y repositorios en un tercer proyecto (AppName.Core), dejando que el proyecto AppName.Web.Core encapsule solo las partes relacionadas con la Web (Atributos, Controladores. ViewModels, etc.). De nuevo eso realmente se relaciona con la complejidad del proyecto.