Startups Enterprise #1. Arquitectura de software
Este es el primer artículo de una serie que estaré escribiendo sobre mejores prácticas en el desarrollo de aplicaciones empresariales para Startups orientado al desarrollo con Node.js.
En el mundo Startup estamos muy acostumbrados a desarrollar software al vuelo, con poca estructura y dejando las buenas prácticas para después, debido a que todo es urgente y a que el trabajo siempre es, como se dice en México “Para Ayer”.
Espero no perderme y no perder a nadie en esta serie de artículos donde hablaré de arquitectura, infraestructura, desarrollo, seguridad y buenas prácticas que podrían llevar nuestra Startup al siguiente nivel.
Trataré de llevar un orden entendible y por ese motivo arrancaré con la arquitectura por ser uno de los temas más abstractos.
Arquitectura de software
Al igual que en el mundo físico para construir una casa se crean planos arquitectónicos para lograr una correcta distribución de espacios, desde la conceptualización hasta el dimensionamiento definitivo que permiten visualizar el concepto del diseño, las formas y dimensiones, el estilo y los detalles y elementos constructivos y estéticos. En el mundo digital es importante tener un marco de referencia para guiar la construcción de un software, permitiendo a los programadores, analistas y todo el conjunto de desarrolladores del software compartir una misma línea de trabajo y cubrir todos los objetivos y restricciones de la aplicación.
En An Introducción to Software Architecture, David Garlan y Mary Shaw; Shaw sugieren que la arquitectura es un nivel de diseño que se centra en aspectos:
Más allá de los algoritmos y estructuras de datos de la computación; el diseño y la especificación de la estructura general del sistema emergen como una clase nueva de problema. Los aspectos estructurales incluyen la estructura global de control y la organización general; protocolos de comunicación, sincronización y acceso de datos; asignación de funciones para diseñar elementos; distribución física, composición de elementos de diseño; ajuste y rendimiento, y selección entre otras alternativas de diseño.
En palabras sencillas la arquitectura de software es un conjunto de patrones o lineamientos que ayudan a organizar la estructura de los componentes importantes del sistema, permitiendo tener una guía de los pasos a seguir para lograr cumplir los requerimientos de un software.
Los ejemplos más comunes en arquitectura de software son:
- Modelo-Vista-Controlador (MVC)
- Patrón de capas
- Patrón cliente-servidor
- Orientada a servicios (SOA)
- Patrón maestro-esclavo
- Dirigida por eventos
SOA es una de las arquitecturas que más escuchamos, ya que engloba los tan sonados Web Services y API’s (SOAP y REST respectivamente), con el pasar de los años y en un mundo cada vez más conectado, el software se vuelve más complejo y debe ser más escalable y cada día de más alta disponibilidad, lo que ha dado como resultado una mayor abstracción en el diseño de la arquitectura, separando responsabilidades entre capas, estableciendo niveles de comunicación y definiendo reglas de dependencias entre ellas. Todo esto para evitar acoplamiento de nuestro dominio con elementos externos, a esto se le conoce como “Arquitecturas Limpias“.
Una arquitectura limpia se caracteriza por favorecer la supervivencia del equipo y del negocio al crear aplicaciones en las cuales es sencillo trabajar, deber ser tolerante al cambio, reutilizable y mantenible y cumplir con 5 lineamientos básicos:
- Independientes del framework.
- Testables.
- Independientes de la UI
- Independientes de la base de datos.
- Independiente de agentes externos
No entraré en detalles para describir cada uno de los anteriores elementos, ya que están muy bien explicados en el sitio principal de “Arquitecturas Limpias“.