asp.net-mvc - net - mvc 5 download
Mejores prácticas para aplicaciones Web ASP.NET MVC compuestas(MEF, Áreas, DI) (1)
Actualmente estoy averiguando cómo reestructurar la arquitectura de una aplicación ASP.NET MVC 3.0 no muy modular. Tengo una estructura tipo plugin en mente para hacer que el proyecto existente sea extensible.
He buscado diferentes estrategias para hacer aplicaciones web modulares y he encontrado lo siguiente. Me gustaría que comentes sobre estas ideas.
- Áreas de MVC en proyectos separados
Para cada complemento quiero crear un proyecto ASP.NET MVC individual que contenga controladores, vistas y modelos de vista para el complemento. Un Módulo "Empleado" contendría un Área para enumerar, crear, actualizar y eliminar empleados. Sin embargo, esto suena bien, se requiere registro de área para colocar todas las áreas en el directorio "bin". Encontré una manera de ubicar mis proyectos de Área directamente en la carpeta Áreas y resolver los ensamblados de Área desde la carpeta "/ Áreas / [Nombre de Área] / bin":
BuildManager.AddReferencedAssembly.Add(Assembly.LoadFrom(…));
AppDomain.CurrentDomain.AssemblyResolve += ResolveAssemblies;
Esto funciona bastante bien y me permite implementar complementos en la carpeta Áreas del proyecto principal. Me gusta que estoy usando la función Áreas que proporciona ASP.NET MVC.
- Áreas portátiles MVC (MVCContrib)
http://elegantcode.com/2012/04/06/mvc-portable-areas/
Las áreas portátiles no parecen ser un buen enfoque, ya que requieren que las vistas se compilen como recursos integrados en el archivo de proyecto del Área. Esto evitaría el almacenamiento en caché de IIS. Por otro lado, realmente no puedo imaginar qué tan grande es la desventaja de rendimiento realmente.
- Módulos basados en MVC usando MEF
http://www.fidelitydesign.net/?p=104
Con el fin de crear servicios débilmente acoplados en otros proyectos, confío mucho en MEF. Por lo tanto, pensé que sería una gran idea usarlo para descubrir módulos / plugins ASP.NET MVC. Terminaría usando un ControllerFactory que instanciaría Controladores exportados usando el atributo ''Exportar''. De esta forma, tendría el control total sobre la instanciación del complemento y podría usar MEF para obtener servicios. Sin embargo, el uso de MEF realmente requiere mucho más trabajo que el uso de áreas MVC, que resuelven los controladores desde el primer momento.
- Entity Framework en proyectos de complementos
Un problema que no pude resolver hasta ahora es cómo distribuir las entidades en los proyectos de complementos individuales. Actualmente usamos un enfoque de Base de datos, que consiste en un archivo de modelo * .edmx que contiene todas las entidades. Incluso con DbContext o Code First, no es posible usar múltiples clases de DbContext para una sola base de datos. Una idea sería utilizar MEF para cargar entidades de diferentes complementos en una clase central DbContext. Sin embargo, no sé si esta es una configuración compatible y / o recomendada.
Otra opción es usar mi Griffin.MvcContrib. Cuida de todas las tuberías y le permite escribir vistas y áreas con pocos cambios de código.
Úselo junto con un contenedor IoC para obtener un poderoso sistema de complemento.
Aquí hay un artículo que demuestra cómo: http://www.codeproject.com/Articles/386674/ASP-NET-MVC-3-plug-in-architecture-using-Griffin-M