Separación de preocupaciones Arquitectura limpia es un término que une muchas arquitecturas y patrones de diseño de software basados en un objetivo común: separación de preocupaciones...
Separación de intereses
Arquitectura limpia es un término que une muchas arquitecturas y patrones de diseño de software basados en un objetivo común: la separación de preocupaciones (SoC). Básicamente, esto significa que el software está dividido en secciones distintas para que cada sección aborde un problema distinto.
En otras palabras, cada aspecto de un sistema debe reflejar una función empresarial distinta, con sus propios requisitos y recursos. Las características de las arquitecturas limpias incluyen la independencia del marco y la capacidad de elegir marcos o herramientas específicos, a diferencia de las restricciones que la dependencia de un marco o biblioteca específica puede imponer al sistema.
Además, todas las capas del sistema deben ser independientes o desacopladas, lo que le permitirá introducir cambios y probar interfaces de usuario, lógica de negocios y almacenes o fuentes de datos sin afectar otras capas o áreas.
Lograr una arquitectura limpia es una especie de Santo Grial: un ideal muy elevado que no es fácil de lograr, ya que la mayoría de los sistemas se encuentran en algún estado de transición. En lugar de centrarse en los aspectos de bajo nivel de la arquitectura limpia, creo que es interesante centrarse en los equipos que crean el software.
Los equipos de ingeniería se pueden organizar de muchas maneras: por función, por tecnología, por áreas de negocio o todo lo anterior alineado por productos, características o módulos específicos. Adoptar un enfoque de arquitectura limpia para los equipos de ingeniería significa alinear estos equipos con áreas independientes del sistema, reflejando las preocupaciones de cada área en su composición y función.
Una combinación perfecta para la subcontratación estratégica
El concepto detrás de las arquitecturas limpias y SoC los hace ideales para trabajar con proveedores de desarrollo externos. Esto se debe a que la decisión de aumentar rápidamente la capacidad de ingeniería y al mismo tiempo reducir el riesgo es a menudo la principal compensación en la subcontratación.
Un sistema que refleja principios de arquitectura limpia no tiene dependencias externas que representarían un único punto de falla. Por ejemplo, la subcontratación de aplicaciones o módulos discretos mitigaría este riesgo. Algunos ejemplos de este tipo de subcontratación de desarrollo de software pueden incluir:
- Migrar aplicaciones heredadas a un nuevo marco o actualizar la lógica específica de la aplicación (o ambas).
- Creación de un nuevo producto o módulo, basado en políticas corporativas, pero con reglas de negocio propias.
- Actualice la capa de interfaz de usuario de un producto o productos para mejorar la experiencia del usuario.
- Creación de nuevas fuentes de datos para mejorar la inteligencia de negocios y la toma de decisiones estratégicas.
Además, un enfoque para lograr una arquitectura más limpia también es un argumento sólido para intensificar los esfuerzos de ingeniería a través de la subcontratación. Por ejemplo, una aplicación monolítica que debe dividirse en dominios, con servicios y microservicios para funcionalidades específicas del contexto, revelará oportunidades en las que los equipos autónomos pueden trabajar sin crear riesgos adicionales para toda la plataforma.
Para entregar software que funcione de manera más efectiva en cualquier capa de la arquitectura, es mucho más probable que un equipo de entrega enfocado produzca más valor que un gran equipo de contribuyentes individuales. Esto es lo que subraya el valor estratégico de contratar servicios de desarrollo subcontratados.
Dado que la arquitectura limpia separa el software en diferentes secciones en las que se puede trabajar individualmente sin afectarse entre sí, un equipo de desarrolladores subcontratado es más beneficioso. Esto se debe a que todos sus integrantes pueden trabajar simultáneamente en diferentes secciones, pero sin perder el panorama general.