Arquitectura

de

Software

Arquitectura de software

Es el diseño de más alto nivel compuesto por una serie de patrones que buscan satisfacer los requerimientos funcionales y no funcionales de un sistema.

La arquitectura debe definir la comunicación entre cada uno de sus componentes.

Existen una serie de patrones y estilos arquitectónicos que nos ayudan a dar solución a diferentes problemas.

Arquitectura de software

Para satisfacer muchos de los requerimientos actuales debemos construir sistemas reactivos.

Arquitectura de software

Patrones arquitectónicos

  • Data Transfer Object
  • Data Access Object
  • SOA
  • Pooling
  • WebHook
  • Load Balance
  • Log Aggregation
  • Service Registry
  • Service Discovery
  • Api Gateway
  • Access Token
  • Single Sign On
  • Store and Forward
  • Circuit Breaker

Estilos arquitectónicos

  • Monolítica, Microlítica
  • Arquitectura de micro servicios
  • Arquitectura orientada a los servicios
  • Arquitectura en capas
  • Cliente - Servidor
  • Clean Architecture
  • Arquitectura Hexagonal
  • Onion
  • Arquitectura dirigida por eventos

Deben trabajar en conjunto

Arquitecto de software

Es el rol que se desempeña dentro de un equipo de TI para proponer, diseñar y trabajar en conjunto con el equipo de desarrollo las decisiones de diseño, definiciones de los atributos de calidad, lineamientos y los elementos fundamentales para la arquitectura (lenguajes de programación, infraestructura, QA e integraciones).

Actividades del arquitecto de software

  • Proponer y balancear atributos de calidad (escalabilidad, elasticidad, mantenibilidad).
  • Definir el problema desde un punto de vista de ingeniería (tomar las HU, atributos de calidad) y plantear un sistema de alto nivel.
  • Proponer principios de diseño para guiar las decisiones de desarrollo.
  • Garantizar el cumplimiento de la arquitectura.
  • Mantenerse al día en la tecnología.

Actividades del arquitecto de software

  • Conocimiento de múltiples plataformas y tecnologías (full stack).
  • Analizar el entorno y proponer mejoras.
  • Administrar la deuda técnica.
  • Entiende el entorno político de la empresa
  • Mentoría al equipo.
  • Desarrolla software o colabora en pair programing

El arquitecto es parte del equipo

  • Debe conocer los requerimientos funcionales.

  • Se debe involucrar en la creación del diseño.

  • Debe pedir que lo involucren en tareas pequeñas de código.

  • Se puede involucrar de 3 maneras:

    • Desarrollar componentes pequeños

    • Pair programing

    • Code review

Skills necesarios

  • Plataformas cloud.

  • Tecnologías.

  • Lenguajes de programación.

  • Patrones de arquitectura y diseño

  • CI/CD

  • Experiencia como desarrollador (full stack)

  • Habilidades blandas

Atributos de calidad

  • Agilidad

  • Confiabilidad

  • Despliegue

  • Disponibilidad

  • Escalabilidad

  • Facilidad de desarrollo

  • Interoperabilidad

  • Mantenibilidad

  • Testing

  • Seguridad

  • Usabilidad

Malos olores

  • Rigidez (hacer un cambio toma mucho trabajo)

  • Fragilidad (un cambio daña otros módulos - acoplamiento)

  • Inmovilidad (no se pueden reutilizar componentes en diferentes sistemas)

  • Viscosidad (cuando hacer las cosas mal es más fácil)

  • Complejidad innecesaria (no anticiparse a problemas que aún no existen)

  • Repetición innecesaria (código repetido)

  • Opacidad (el código no te dice que está pasando)

Toma de decisiones

  • Experiencia

  • Through Works
  • InfoQ

Arquitectura de Software

By Oscar Luis Sánchez Jara

Arquitectura de Software

Definición de arquitectura de software

  • 694