2012-02-10 14 views
9

Me gustaría saber cómo puedo hacer para estructurar una aplicación web usando una carpeta por función (Clientes, Pedidos) en lugar de una carpeta por tipo de artefacto (Controladores, Vistas); esta parece ser una forma mucho mejor de organizar grandes proyectos con muchas características, pero no puedo encontrar ninguna información al respecto.¿Cómo estructurar la aplicación ASP.NET MVC utilizando la organización por función en lugar de por artefacto?

No creo que el uso de Áreas sería una solución, porque el uso de un Área por función requeriría la creación de muchas carpetas anidadas.

Creo que lo que quiero hacer debería ser posible mediante la personalización de una implementación de IViewEngine, pero no estoy seguro de eso.

¿Alguien ha intentado hacer esto?

Respuesta

2

Puede cambiar la ubicación donde se almacenan las vistas, si lo desea. Un ejemplo, http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.asp.

ASP.NET MVC es fácil de desarrollar debido a la filosofía de la convención sobre la configuración. Si realmente quieres cambiar esas convenciones, puedes; sin embargo, te encontrarás haciendo mucha más codificación. Por ejemplo, los andamios no funcionarán con su configuración.

¿Por qué no crear simplemente sus separaciones lógicas dentro de las carpetas de artefactos? Por lo tanto, dentro de su carpeta Models, tenga una carpeta para ViewModels y otra para DataModels. Dentro de la carpeta DataModels, cree carpetas para los diferentes subconjuntos de modelos (clientes, pedidos, etc.). Solo mis 2 centavos.

+0

Esto es más o menos la razón por la que no me gusta el co original nvention: http://www.paulstovell.com/horizontal-vertical-project-structure - Ya estoy usando este tipo de estructura en otros proyectos y me conviene. Sé que esto se puede hacer personalizando las implementaciones de IViewEngine e IControllerFactory, aquí estoy buscando alguna experiencia práctica sobre este cambio de convenciones y por qué lo es o no lo vale. Nota: No voy a usar andamios – gschuager

+0

Estoy de acuerdo. Agrupación por rol, p. Controladores/Modelos/Vistas realmente comienza a morderte una vez que los proyectos crecen más allá de unos pocos controladores. La organización basada en funciones está muy avanzada en la organización de proyectos de producción. Lo recomiendo con cualquier proyecto. – demisx

2

Puede crear la carpeta de funciones raíz, crear una carpeta para cada una de sus funciones y una carpeta compartida dentro de ella. Luego puede agregar todos los archivos (controladores, modelos, vistas, scripts) relacionados con una sola característica a su carpeta. Si varias funciones usan el mismo archivo, puede hacerlo en la carpeta Compartido. Esta es la forma en la estructura del proyecto puede verse como:

- App 
    - Features 
    - Orders 
     - OrdersController.cs 
     - Create.cshtml 
     - Create.js 
     - CreateModel.cs 
     - Edit.cshtml 
     - Edit.js 
     - EditModel.cs 
     - EditViewModel.cs 
     ... 
    - Customers 
     ... 
    - Shared 
     - _Layout.cshtml 
     - Error.cshtml 
    - _ViewStart.cshtml 
    - Web.config 
    - FeatureViewLocationRazorViewEngine.cs 
    ... 
    - Web.config 

Para utilizar la maquinilla de afeitar con esta estructura de carpetas que necesita para crear nueva clase de vista del motor heredado de RazorViewEngine, ajuste adecuado ViewLocationFormats, MasterLocationFormats, PartialViewLocationFormats y añadir instancia de su vista motor a la colección ViewEngines.Engines. Para la implementación de la muestra y su uso, verifique FEATURE FOLDERS IN ASP.NET MVC article por Tim G. Thomas.

Si desea utilizar clases como Scripts en sus vistas, también debe importar sus espacios de nombres. Una forma de hacerlo es copiar el archivo Web.config de la carpeta Vistas anterior a la carpeta Características. Para otra opción, marque la pregunta How do I import a namespace in Razor View Page?.

Para más información consultar los artículos siguientes:

Cuestiones relacionadas