¿Qué patrón de diseño debo seguir para mi aplicación web?

Tengo una aplicación ASP.NET que proporciona servicios de front-end (visualizaciones) y servicios de back-end (transformaciones de datos y salida de algunos datos de bases de datos SQL de back-end). Quisiera lo siguiente:

Backend extensible Permita que otra persona cargue un "complemento" para permitir que se agregue una API REST adicional

Frontal extensible: Actualmente tengo el front-end con una barra de URL superior como esta:

Category-1   Category-2   Category-3
--App11      ---App21     ---App31
--App12

Estoy buscando algo como esto: suponiendo que mi aplicación tiene un panel de administración simple, cuando alguien carga un "módulo" compatible con un archivo de manifiesto, la aplicación debe agregarlo a la aplicación principal y agregar un enlace a una de las categorías basadas en lo que dice el manifiesto del complemento. Opcionalmente, agregue una descripción de este complemento a la página web principal de la aplicación.

Específicamente, estoy buscando sugerencias sobre lo siguiente:

  • ¿Cómo debe estructurarse la aplicación principal?
  • ¿Cómo debería ser la arquitectura del plugin?
  • ¿Cómo habilito un tablero como el diseño y dejo que el complemento lo admita?

he visto esto en Joomla, un sistema de gestión de contenido, pero no estoy seguro de cuál es el paradigma de diseño que se debe seguir para permitirlo. Hice una tontería y diseñé mi aplicación actual (enorme) como separada aspx archivos vinculados desde una aplicación principal. No me importa reescribir partes de él, pero sin una reescritura importante, ¿es posible lograr lo que deseo? ¿Alguna sugerencia sobre cómo lograr esto?

preguntado el 12 de junio de 12 a las 22:06

Echa un vistazo a Umbraco y NopCommerce (Complementos implementados por NC basados ​​en la implementación de Umbraco). Estamos desarrollando un sitio en NC y la arquitectura del complemento funciona bien. -

1 Respuestas

Una solución básica:

Bastante cerca de bare-metal, pero para el back-end, puede crear un dll, que contiene la lógica, y un HttpModule que registra nuevos GenericHandlers para manejar solicitudes. O use web.config para registrar módulos de complemento, o use Microsoft.Web.Infrastructure.DynamicModuleHelper a registre sus módulos http en tiempo de ejecución simplemente copiándolo en su papelera sin modificar web.config.

Áreas portátiles:

MVCContrib tiene una función llamada "PortableAreas" que se puede usar para empaquetar la interfaz de usuario y el código de back-end en un dll como un complemento. Los controladores MVC pueden devolver fácilmente contenido HTML para UI y JSON o XML para actuar como un servicio web REST. Además, MVCContrib define un "Bus" que los complementos pueden usar para comunicarse con la aplicación host. Como "¡Oye, agrega un nuevo enlace a la categoría XY que apunte a mí!".

Eche un vistazo a estas publicaciones de blog sobre áreas portátiles: asp net mvc áreas portátiles a través de mvccontrib (habla de MVC2, pero también funciona en MVC3). La última versión se puede descargar a través de nuget: MvcContrib.Mvc3-ci.

ASP.NET MVC es simplemente "ASP.NET"

Por lo tanto, los formularios web y MVC pueden vivir en la misma aplicación. Echa un vistazo a este artículo sobre "consumiendo un área portátil con una aplicación de formularios web". Básicamente, solo se trata de agregar dlls relacionados con MVC y la configuración a su aplicación existente, y configurar la comunicación.

O echa un vistazo a un CMS real,

tal vez usar uno que tenga un sistema de complemento documentado y funcional sea la solución real. Depende de qué porcentaje de las funciones formarían parte de la "aplicación principal" y qué porcentaje se desarrollaría como complementos y sus necesidades.

Respondido el 20 de junio de 20 a las 10:06

+1 Gracias por la respuesta! Seguí sus sugerencias y encontré un tutorial sobre cómo comenzar con este patrón. Me encuentro con un problema que publiqué aquí: stackoverflow.com/questions/11023748/… ¿Te importaría echarle un vistazo cuando tengas tiempo? ¡Gracias! - Leyenda

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.