c# - tutorial - ASP.NET MVC 5 ¿Arquitectura modular de aplicaciones web?
mvc vs web forms asp net (2)
También puede intentar usar la arquitectura de complementos, simplemente compile los diferentes módulos que conforman la aplicación como complemento, luego compile el módulo que se requiere para cada aplicación como un único código base. En este caso, la instalación de un componente para cualquier usuario en particular, será una cuestión de agregar o retirar complementos. Muchos proyectos grandes hacen de esta arquitectura particular, ya que reduce el copiar y pegar, aumenta y reutiliza y acelera el desarrollo. Puede revisar un proyecto de código abierto para obtener una idea de cómo se hace.
La empresa en la que trabajo actualmente está luchando con una decisión arquitectónica para nuestra gama de aplicaciones. En este momento tenemos un par de aplicaciones que tienen partes comunes (piense como un módulo de calendario). Hasta ahora seguimos copiando código de otras aplicaciones existentes, pero en el futuro queremos evolucionar nuestras aplicaciones a un diseño más modular:
Como puede ver en la imagen anterior, es posible tener diferentes versiones de módulos por aplicación.
Estamos considerando posibles soluciones:
- Construyendo un marco de aplicación central donde podamos instalar nuestros módulos. Estamos pensando en una herramienta como Nuget para lograr esto.
- Construyendo una aplicación donde todos nuestros módulos están incluidos en (= una base de código), pero el cliente solo obtiene la funcionalidad que está activada para él. Estamos viendo algunos problemas con las versiones aquí.
¿Alguna sugerencia sobre esto? No podemos ser la primera empresa que lucha con este problema. Todas nuestras aplicaciones son aplicaciones web ASP.NET MVC 4/5, creadas con plantillas Razor o plantillas JavaScript (knockout.js). Todas nuestras aplicaciones se implementan en Microsoft Azure y tenemos un amplio conocimiento interno de buildscripts (MSBuild), servidores CI ...
Tener un proyecto / ensamblaje separado para cada módulo y entregarlo como paquete Nuget es definitivamente una buena estrategia.
Ventaja:
- Puede mantener y lanzar múltiples versiones. Diferentes clientes obtienen diferentes versiones.
- Instalación de la última versión o versión específica soportada a través de Nuget. Esto ayuda durante el desarrollo donde el desarrollador de la Aplicación A puede apuntar a la versión 2.0 del módulo A mientras que el desarrollador de la Aplicación B puede apuntar a la 1.0.
- Base de una sola fuente con ramas separadas para cada versión. El cliente que use 1.0 solicite un cambio obtendrá el código de la rama 1.0 con solo la corrección solicitada.
- Cada módulo puede ser lanzado o actualizado independientemente.
Desafíos:
Durante el desarrollo, el código del ensamblaje de depuración se instala con Nuget. Nuget lo soporta incorporado. Lo conseguimos en nuestro caso (Framework siendo utilizado por múltiples plataformas).
Cambios de código requeridos en el código del módulo (se requiere un error o una nueva característica). Bueno, esto es complicado:
Opción 1: el mismo desarrollador simplemente siga adelante y haga ese cambio, cree un nuevo paquete e instale una nueva versión en su aplicación. Tengo que autorizar el cambio ya que es un código crítico.
Opción 2: Un equipo designado responsable de solucionar el problema o la solicitud de cambio en el código de marco.