Descomposición del sistema
La descomposición del sistema es el proceso de dividir un código base monolítico en componentes y dependencias individuales. Esta transformación reduce el tamaño y la complejidad de tu sistema, haciéndolo más eficiente de construir y más fácil de administrar.
Para poder descomponer el sistema, deberá obtener una mejor información sobre el código y la solución para identificar qué componentes se pueden separar y administrar de forma independiente.
El objetivo de la descomposición
El objetivo principal es reducir el tamaño del código base y del sistema por:
- Eliminación de componentes específicos: Extraiga componentes reutilizables de la solución.
- Centralización del código: Consolide el código duplicado o compartido en componentes únicos.
- Mantenimiento independiente: Permitir que los componentes se mantengan y tengan versiones por separado.
- Mejora de la eficiencia: Haga que las compilaciones sean más rápidas trabajando con código base más pequeños.
Proceso de descomposición
Identificación de componentes para la extracción
Para lograr la descomposición, identifique componentes específicos de la solución que pueden ser:
- Centralizado: Se mantiene en una sola ubicación.
- Reutilizado: Consumido por varios proyectos o equipos.
- Se mantiene de forma independiente: Versionado y publicado según su propia programación.
Externalizar componentes
Quitará esos componentes y los externalizará de la solución. Este proceso implica:
- Creación de proyectos independientes: Mover código a nuevos artefactos de solución.
- Publicación de paquetes: Cree paquetes a partir de los componentes extraídos.
- Introducción a las dependencias: Actualice el código de consumo para hacer referencia a los componentes externos.
Consideración importante: Los componentes se externalizan a costa de introducir dependencias en otros componentes. Este equilibrio debe administrarse cuidadosamente.
Refactorización de código de consumo
Este proceso de búsqueda y externalización de componentes es la creación eficaz de dependencias. Puede requerir refactorización:
Cambios en la organización del código:
- Cree nuevos artefactos de solución: Nuevos proyectos o repositorios para componentes extraídos.
- Actualizar las referencias del proyecto: Cambie de referencias de proyecto a referencias de paquete.
- Reorganizar estructuras de carpetas: Alinee con los nuevos límites de componentes.
Cambios de código:
- Actualizar instrucciones de importación: haga referencia a los componentes de sus nuevas ubicaciones.
- Gestionar cambios disruptivos: Ajustar el código para trabajar con interfaces componentizadas.
- Quitar código duplicado: Reemplace el código copiado por referencias de componentes.
Aplicar patrones de diseño
Es posible que tenga que introducir patrones de diseño de código para aislar e incluir el código componente correctamente.
Patrones comunes para la descomposición:
- Abstracción por interfaces: defina contratos claros entre componentes para reducir el emparejamiento.
- Inserción de dependencias: Permitir que las dependencias se proporcionen en tiempo de ejecución en lugar de codificarse de forma rígida.
- Inversión de control: Permitir que los marcos administren las dependencias y el ciclo de vida de los componentes.
- Patrón de fachada: Proporcione interfaces simplificadas a subsistemas complejos.
- Patrón de adaptador: Permitir que las interfaces incompatibles funcionen juntas.
Ventajas de estos patrones:
- Capacidad de prueba: Los componentes se pueden probar de forma aislada con dependencias ficticias.
- Flexibilidad: Las implementaciones se pueden intercambiar sin cambiar el código de consumo.
- Mantenibilidad: Borrar límites facilita la comprensión y modificación del código.
Alternativa: Aprovechar los componentes existentes
La descomposición también podría significar reemplazar la implementación del código reutilizable por un componente comercial o de código abierto disponible.
Cuándo reemplazar o extraer:
- Reemplace por existente: Cuando existen alternativas bien mantenidas que satisfagan sus necesidades.
- Extraiga el suyo propio: cuando el código proporciona un valor empresarial único o una funcionalidad específica.
Ventajas de usar componentes existentes:
- Mantenimiento reducido: Permitir que la comunidad o los proveedores mantengan el código.
- Calidad probada: Benefíciese de un uso y pruebas exhaustivos.
- Desarrollo activo: Obtenga nuevas características y actualizaciones de seguridad.
- Ahorro de costos: Evite el tiempo de desarrollo para la funcionalidad común.
Procedimientos recomendados para la descomposición
Inicio pequeño
- Comience con componentes bien definidos y de bajo riesgo.
- Valide el proceso antes de abordar áreas complejas.
Mantener la compatibilidad con versiones anteriores
- Considere la posibilidad de realizar migraciones por fases para minimizar la interrupción.
- Proporcione rutas de migración claras para los equipos consumidores.
Límites del componente de documento
- Defina claramente de qué es responsable cada componente.
- Interfaces y contratos de documentos.
Componentes de versión correctos
- Use versionado semántico para comunicar los cambios.
- Mantenga la compatibilidad dentro de las versiones principales.
Supervisión del estado del componente
- Realice un seguimiento del uso para comprender el impacto.
- Supervise el rendimiento y la confiabilidad de los componentes descomponidos.