Cómo hacer que un sitio ASP.NET MVC sea modular

14

Estoy en la etapa de planificación para que se construya un sistema de intranet de empleados con ASP.NET MVC 4. Queremos que el sitio conste de "módulos" separados, cada uno de los cuales proporciona una característica diferente: mensajería, nómina cambios, etc. Me gustaría que estos módulos se puedan habilitar o deshabilitar en el momento de la compilación. La página de inicio mostrará algún tipo de navegación que se vinculará a cada módulo que se cargue.

Hasta ahora es fácil, pero no quiero que la función de navegación tenga que conocer los módulos de antemano. En otras palabras, quiero que los módulos se puedan descubrir dinámicamente; Quiero poder escribir el código para un nuevo módulo y luego agregar un enlace a la barra de navegación sin cambios de código en ninguna otra parte de la fuente. Cada módulo debe tener alguna forma de registrarse con la barra de navegación y, lo que es más importante, debe hacerse para cada módulo a medida que se carga.

Creo que esto excluye el uso de Áreas MVC, ya que están diseñadas para el caso cuando el diseño del sitio se conoce de antemano. El MEF parece que podría ser apropiado, aunque la gente parece haber tenido éxito mixto al combinar MEF con MVC. ¿Es realmente el MEF el camino a seguir, o hay una mejor manera de lograr lo que necesito?

    
pregunta bdesham 23.01.2013 - 15:38

2 respuestas

4

Primero tendría una clase centralizada que se usa para que la aplicación registre módulos compilados con un constructor estático y una lista de miembros estática en el sistema. Los módulos tendrían una propiedad estática que indicaría si se trata de un elemento del menú y qué orden debería aparecer en el menú.

Cada módulo tendría su propio constructor estático que se destacaría en la clase centralizada que realiza un seguimiento de los módulos.

Piense en este sistema más como un sistema de reloj de tiempo en el que los empleados ingresan y lo hacen. Luego, en el momento de la nómina, sabemos que debemos pagar a todos los empleados en función de quién haya ingresado, etc.

La reflexión también se podría usar si tiene un contrato de interfaz en los módulos que deben heredar de la información de la meta propiedad.

Trabajé para Warner Brothers Music e hice un sistema interno de procesamiento de música para diferentes formatos de codificación. Hice un modelo de complemento genérico para codificar con reflejo que usaba la herencia, por lo que podría encasillarse con el reflejo para obtener las meta propiedades básicas de la clase. Sin embargo, no he intentado usar una clase centralizada estática. Solo pensé en eso al azar como otra forma de intentar divertirte.

También agregaría que he usado MVC para atender a varios clientes con una línea de base de requisitos pero también con características mejoradas similares a las que estás tratando de hacer. En su lugar, convertí el MVC en usar App_Code en lugar de requerir una compilación. Es más fácil enviar archivos de esta manera sin necesidad de una compilación centralizada.

Puede aprovechar JIT con un simple FTP o GIT push en lugar de tener que compilar localmente y empujar DLL alrededor.

Aquí hay un enlace a ese artículo en desbordamiento de pila

    
respondido por el Jason Sebring 23.01.2013 - 17:27
1

Es posible que desee ver cómo usar MEF con MVC. Esto le daría la posibilidad de agregar - quitar como sea necesario sin volver a compilar o implementar. Como siempre, Scott es un buen lugar para comenzar: enlace

    
respondido por el Eldon Elledge 07.02.2013 - 17:47

Lea otras preguntas en las etiquetas

Comentarios Recientes

con Bootstrap Esta vez, cuando está codificando diseño web, la web tiene un marco de diseño modular llamado Bootstrap. ¡Bootstrap está en una larga lucha para hacer que la web sea plural! ¿Cómo se relaciona esto con React? ? 1 - Mejores prácticas para PHP (!) No debería obtener su código hasta que haya visto cómo Paul Graham usó Bootstrap. Así que intente crear un sitio Bootstrap muy reutilizable como este. Uno debería hacer que sea fácil colocar accesorios en él. Algo de lo que escribí sobre esto (tiene... Lee mas