Entendemos como arquitectura de software la estructura base que utilizan los desarrolladores para, posteriormente, crear su programa, ensamblando los distintos componentes. Cuando todas estas piezas están ensambladas, habrá un sistema propio que funcione. Y que, obviamente, debe estar adaptado a las necesidades.
Conocer los patrones de diseño de software, los tipos de arquitectura y cómo diseñarla es fundamental. Pensemos que, en los últimos años, han aparecido nuevas posibilidades gracias al desarrollo de la nube, del Big Data y de la Inteligencia Artificial (IA). En los estudios de un Bachelor en Informática se tratan todos estos elementos con detalle.
Los tipos de arquitectura de software son de muchos tipos, según tu necesidad. Recordemos que esto sirve distintas casuísticas, también para los sistemas distribuidos. Además, el data mining ha abierto nuevas opciones y modelos, gracias a la capacidad de procesamiento de datos. Existen numerosos tipos de arquitectura de software, y la elección de uno u otro depende de las necesidades del proyecto (como la escalabilidad, la simplicidad o la resiliencia). Para entenderlos mejor, podemos agruparlos en varias categorías principales:
Son los pilares clásicos sobre los que se ha construido la mayoría del software.
Arquitectura monolítica
: Es el enfoque tradicional donde toda la aplicación se construye como una única unidad robusta. Todo se gestiona de forma unificada.
Ventaja: Es simple de desarrollar y desplegar al principio.
Desventaja: Con el tiempo, los costes de mantenimiento aumentan y se vuelve difícil de escalar o modificar partes concretas sin afectar al resto.
Arquitectura cliente-servidor
: Es la base de la web. Separa claramente las responsabilidades: un cliente (como tu navegador) solicita información y un servidor (que aloja la web) la procesa y se la entrega.
Arquitectura por capas
: Es la forma más común de organizar un monolito. El software se divide en capas horizontales, donde cada una tiene una función (ej. Presentación, Lógica de Negocio y Datos). Los cambios en una capa no deberían afectar, en teoría, a las demás.
Estas arquitecturas surgieron como respuesta a la necesidad de mayor escalabilidad, flexibilidad y resiliencia que exigen las aplicaciones modernas.
Arquitectura Orientada a Servicios
(SOA): Un precursor de los microservicios. Organiza la aplicación en un conjunto de servicios independientes que pueden combinarse e integrarse entre sí para crear flujos de negocio.
Arquitectura de microservicios
: Lleva la idea de SOA más allá. La aplicación se divide en un conjunto de servicios muy pequeños e independientes, cada uno enfocado en una única función de negocio.
Ventaja: Si un servicio falla, los demás pueden seguir funcionando (resiliencia). Permite escalar solo las partes que más se usan.
Desventaja: Su gestión es más compleja, ya que requiere orquestar la comunicación entre muchos servicios.
Arquitectura Orientada a Eventos
(EDA): Un modelo donde los componentes del sistema no se llaman directamente, sino que reaccionan a "eventos" (estímulos asíncronos). Por ejemplo, cuando un usuario "crea una cuenta", se emite un evento, y los servicios de "email de bienvenida" o "facturación" reaccionan a él. Aporta una gran flexibilidad, aunque puede ser más difícil de depurar.
Estos no definen todo el sistema, sino cómo se organiza el código dentro de una aplicación o servicio.
Arquitectura MVC
(Modelo-Vista-Controlador): Es un patrón de diseño muy popular que divide la aplicación en tres componentes para separar responsabilidades: el Modelo (datos y lógica de negocio), la Vista (la interfaz de usuario) y el Controlador (que gestiona las peticiones).
Arquitectura hexagonal
(o de Puertos y Adaptadores): Un patrón moderno que busca aislar completamente el núcleo de negocio (la lógica pura) de elementos externos como bases de datos, frameworks o interfaces de usuario. Se conecta a ellos mediante "puertos" y "adaptadores", lo que la hace muy flexible y fácil de probar.
Existen una serie de principios a seguir para diseñar un software con eficiencia y que cumpla con las necesidades que tengas. Son estos:
Lo primero que se debe hacer es analizar la situación para determinar los objetivos. ¿Qué necesidad se pretende solventar? Y, a partir de ahí, plantearse cuáles son las mejores alternativas para crear una arquitectura de software adaptada.
Obviamente, en esta fase toca saber qué tipo de usuarios utilizarán el sistema, para qué funciones y con qué vías de entrada. Sin estos ítems, no es posible preparar un sistema con condiciones.
Identificar los drivers y objetivos de arquitectura es fundamental para saber de qué medios se dispone y, lo que es más, cuáles son los correctos para cada proyecto. Los drivers, hoy en día, están determinados, la mayoría de las veces, por el estándar de calidad ISO 25010. Hay cuestiones como la performance, el mantenimiento o la escalabilidad que se tienen que adaptar a los objetivos previamente marcados.
El estilo de arquitectura con el que vas a funcionar es igualmente importante. Ya hemos hablado de las distintas tipologías, pero también debes tener en cuenta el tamaño y la portabilidad. Al final, el estilo se tiene que adaptar al uso que se vaya a hacer.
El diseño del software, una vez que tengas la idea, es la plasmación práctica. Para ello, es bueno que sepas cómo plasmarlo y las cuestiones técnicas y de código que utilices. Hay distintas herramientas para realizar el diseño, y esta es la etapa para decidir cuáles utilizar.
La arquitectura de software es un proceso complejo que permite crear soluciones específicas y trabajar de forma eficiente. En una formación clásica, conocerás los principales pasos para crear apps con garantías.