2009-05-27 10 views
5

Desarrollaremos una aplicación web de mercado vertical muy grande y nos inclinamos hacia el enfoque MVC.¿Cómo estructurar, particionar y construir una aplicación MVC grande para su implementación en pequeñas piezas incrementales?

Tendrá 1 página maestra común para todas las vistas en la aplicación. El maestro proporcionará un marco de navegación/búsqueda para toda la aplicación que permitirá a los usuarios buscar y seleccionar entidades y luego navegar a una función para realizar.

El modelo de la base de datos tendrá de 700 a 1000 tablas. La aplicación tendrá cientos de controladores.

Los controladores y sus vistas se pueden agrupar en uno de los muchos (20-50) subsistemas de la aplicación. (Estamos buscando un enfoque de áreas para ayudar en la organización).

Queremos ofrecer mejoras/actualizaciones en pequeñas piezas funcionales. Esto podría ser una función nueva, una corrección de errores, funcionalidad dependiente del cliente o módulos opcionales adquiridos por el usuario final.

Pasamos demasiados años desarrollando/apoyando y entregando una aplicación de Windows vb grande exe. Nos gustaría tomar otro enfoque.

La administración no desea entregar una aplicación grande. Quieren poder entregar pequeñas piezas incrementales cuando sea necesario.

Es posible que deseemos crear un entregable que contenga un controlador, y solo un par de vistas, y una parte del modelo.

Para entregarlo, queremos copiar una carpeta dll en una carpeta bin, y crear una carpeta Ver y copiar en la (s) nueva (s) vista (s). ¡Lo más sencillo posible!

He pasado muchos días investigando esto y no he encontrado un camino claro para proceder. (Todos los tutoriales y artículos que encontré asumieron un solo proyecto).

¿Cómo estructuramos la aplicación para lograr esto?

¿Cómo dividimos la aplicación en proyectos/conjuntos separados para hacer esto?

¿Se puede construir un proyecto base que contenga la página maestra, la autenticación y el enrutamiento global, y luego hacer referencia a esto en cada uno de los cientos de proyectos potenciales para cada uno de los módulos?

En desarrollo, ¿cada subproyecto necesita contener todo el proyecto base, o solo la carpeta de vistas compartidas, enrutamiento global, y web.config y una referencia al dll del proyecto base?

¿Alguna documentación detallada que explique este enfoque?

¿Algún problema de desarrollo/prueba?

Gracias por toda la información, tenemos que hacerlo funcionar pronto.

Actualización:

siguió el ejemplo aquí link text

Es un gran punto de partida!

+0

Voy a hacer algunos deberes ahora. Si alguien tiene documentos específicos, ejemplos, tutoriales, no dude. En las últimas dos semanas he usado M, V y C en mi teclado. –

+0

SY - ¿Qué terminaste haciendo? –

+0

LuckyLindy - Estamos usando áreas. Está funcionando muy bien en MVC 2 Beta en este momento. Tenemos un proyecto principal y cada aplicación es un proyecto secundario. El dll de cada aplicación hija se implementa en el contenedor primario y las vistas secundarias se copian manualmente en la estructura de carpetas de áreas en el elemento principal. –

Respuesta

0

Google for MVC with MEF. Hay un ejemplo de uno de los equipos de MEF que se adaptará exactamente a sus necesidades.

+0

Interesante ... Tendré que verificarlo. La URL es - http://blogs.msdn.com/hammett/archive/2009/04/23/mef-and-asp-net-mvc-sample.aspx – GuyIncognito

+0

Esa es la única. Estaba en el iPhone o lo hubiera buscado en Google. – Burt

+0

Esto suena demasiado bueno para ser cierto. Definitivamente voy a mirar esto. ¿Realmente está destinado a manejar hasta 500 complementos? ¡Gracias! –

1

Creo que este es exactamente el caso donde DLR ayudaría. Sus Controladores y Vistas pueden almacenarse como scripts en la base de datos. Será muy fácil entregar su aplicación como un conjunto de "pequeñas piezas funcionales". Puede comenzar leyendo Haacked - Scripting ASP.NET MVC Views Stored In The Database

+0

Gracias. Esto puede ser algo para mirar, pero inicialmente estoy buscando cómo dividir el proyecto en dll. –

1

Absolutamente, divide el proyecto en subproyectos/módulos que contienen tus controladores. Puede usar un contenedor IoC como Unity, Spring.Net o Castle Windsor para ubicar los controladores apropiados en los proyectos secundarios.

Implemente su propio IControllerFactory para realizar las búsquedas del controlador en el contenedor IoC según el nombre del controlador que se le haya pasado. Usted está mirando para poner en práctica un método de IControllerFactory.CreateController que se ve algo como:

public IController CreateController(RequestContext requestContext, string controllerName) 
{ 
    return (IController)IoCContainer.GetObjectByName(controllerName); 
} 

, entonces debería ser capaz de simplemente modificar el archivo de configuración de la COI a definir sus nuevos controladores, ya que se despliegan.

+0

Genial. (Pensé que estaba un poco abrumado con todo el concepto de MVC, ahora que profundizo más ...) Más deberes para hacer, pero gracias por la entrada. –

+0

No .. esto no es algo para ser abrumado por. Casi todo en MVC es reemplazable y extensible. Si está buscando construir un extenso sitio web de MVC, necesitará profundizar en las esquinas del marco para agregar sus puntos de extensibilidad. –

+0

+1 Este es obviamente el camino a seguir para nuestra aplicación general. La idea inicial fue un enfoque dinámico para agregar controladores que MEF hace. Evaluaremos los contenedores de IoC para la aplicación central y los muchos otros beneficios que ofrece más allá de MEF. ¡Gracias por el aporte! –

Cuestiones relacionadas