Tipos de arquitectura de software
Contenidos
Cuando asistía a la escuela nocturna para convertirme en programador, aprendí varios patrones de diseño: singleton, repositorio, fábrica, constructor, decorador, etc. Los patrones de diseño nos dan una solución probada a problemas existentes y recurrentes. Lo que no aprendí es que existe un mecanismo similar a un nivel superior: los patrones de arquitectura de software. Se trata de patrones para el diseño general de tu aplicación o aplicaciones. Todos tienen ventajas y desventajas. Y todos abordan cuestiones específicas.
El patrón de capas es probablemente uno de los patrones de arquitectura de software más conocidos. Muchos desarrolladores lo utilizan, sin saber realmente su nombre. La idea es dividir el código en “capas”, donde cada capa tiene una determinada responsabilidad y proporciona un servicio a una capa superior.
La idea es que el usuario inicie una pieza de código en la capa de presentación realizando alguna acción (por ejemplo, haciendo clic en un botón). La capa de presentación llama entonces a la capa subyacente, es decir, a la capa de aplicación. Luego pasamos a la capa de negocio y, por último, la capa de persistencia almacena todo en la base de datos. Así que las capas superiores dependen de las capas inferiores y las llaman.
Principios de arquitectura de software
La arquitectura de software se refiere a las estructuras fundamentales de un sistema de software y a la disciplina de crear dichas estructuras y sistemas. Cada estructura comprende elementos de software, relaciones entre ellos y propiedades tanto de los elementos como de las relaciones[1]. La arquitectura de un sistema de software es una metáfora, análoga a la arquitectura de un edificio[2]. Funciona como un plano para el sistema y el proyecto en desarrollo, estableciendo las tareas necesarias para ser ejecutadas por los equipos de diseño[3].
La arquitectura de software consiste en tomar decisiones estructurales fundamentales que son costosas de cambiar una vez implementadas. Las elecciones de arquitectura de software incluyen opciones estructurales específicas a partir de posibilidades en el diseño del software. Por ejemplo, los sistemas que controlaban el vehículo de lanzamiento del transbordador espacial tenían el requisito de ser muy rápidos y muy fiables. Por lo tanto, habría que elegir un lenguaje de computación en tiempo real adecuado. Además, para satisfacer la necesidad de fiabilidad se podría optar por tener múltiples copias redundantes e independientes del programa, y ejecutar estas copias en hardware independiente mientras se verifican los resultados.
Introducción a la arquitectura de software
A pesar del interés que suscita la arquitectura de software como campo de investigación, los investigadores no se ponen de acuerdo sobre qué debe incluirse exactamente en la definición de arquitectura. En muchos casos, esto ha llevado a que se pasen por alto aspectos importantes del diseño arquitectónico en investigaciones anteriores. Este capítulo define una terminología autoconsistente para la arquitectura de software basada en un examen de las definiciones existentes en la literatura y en mi propia visión con respecto a las arquitecturas de aplicaciones basadas en la red. Cada definición, resaltada en un recuadro para facilitar su consulta, va seguida de una discusión sobre cómo se deriva o se compara con investigaciones relacionadas.
Una arquitectura de software es una abstracción de los elementos en tiempo de ejecución de un sistema de software durante alguna fase de su funcionamiento. Un sistema puede estar compuesto por muchos niveles de abstracción y muchas fases de funcionamiento, cada una con su propia arquitectura de software.
En el corazón de la arquitectura de software se encuentra el principio de abstracción: ocultar algunos de los detalles de un sistema a través de la encapsulación con el fin de identificar y mantener mejor sus propiedades [117]. Un sistema complejo contendrá muchos niveles de abstracción, cada uno con su propia arquitectura. Una arquitectura representa una abstracción del comportamiento del sistema en ese nivel, de tal manera que los elementos de la arquitectura están delineados por las interfaces abstractas que proporcionan a otros elementos en ese nivel [9]. Dentro de cada elemento puede encontrarse otra arquitectura, que define el sistema de subelementos que implementan el comportamiento representado por la interfaz abstracta del elemento padre. Esta recursión de arquitecturas continúa hasta los elementos más básicos del sistema: aquellos que no pueden descomponerse en elementos menos abstractos.
Capas de arquitectura de software
Cada vez más, las empresas están atravesando un viaje de transformación digital para satisfacer las necesidades cambiantes de los consumidores. Además, los clientes utilizan cada vez más las redes sociales, las aplicaciones móviles y las tecnologías digitales. Debido a este cambio, la estrategia digital es ahora una parte integral de la estrategia empresarial global.
Muchas empresas están obteniendo potencia informática a través de plataformas de servicios en la nube a través de Internet y adoptando una estrategia de “cloud-first” para la mayor parte del desarrollo de aplicaciones. Esto ha impulsado un cambio en el diseño de las aplicaciones: antes se priorizaba la funcionalidad y el estado, pero ahora la mayoría de las aplicaciones orientadas al consumidor se están moviendo hacia el software como servicio (SaaS) y las plataformas digitales. El diseño de las aplicaciones se centra ahora mucho más en la experiencia del usuario, la ausencia de estado y la agilidad.
La elección de la arquitectura de aplicaciones adecuada depende de los requisitos de su negocio. En este artículo, examinaremos cuatro opciones de arquitectura para permitir la transformación digital, en función de las necesidades empresariales generales.