Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Arquitectura Informática
La arquitectura ágil significa cómo los arquitectos de empresas / sistemas / software aplican la
práctica arquitectónica en el desarrollo de software ágil. Varios comentaristas han identificado
una tensión entre la arquitectura de software tradicional y los métodos ágiles a lo largo del eje
de adaptación (dejando las decisiones arquitectónicas hasta el último momento posible) frente
a la anticipación (planificación por adelantado). (Kruchten, 2010)
Waterman, Nobel y Allan (2015) exploraron las tensiones entre pasar muy poco tiempo
diseñando una arquitectura inicial, aumentando el riesgo y gastando demasiado tiempo, lo que
tiene un impacto negativo en la entrega de valor al cliente. Identifican seis fuerzas que pueden
afectar la arquitectura ágil: inestabilidad de los requisitos, riesgo técnico, valor inicial, cultura
de equipo, agilidad del cliente y experiencia. Estas fuerzas pueden abordarse mediante seis
estrategias; Responda al cambio, aborde el riesgo, la arquitectura emergente, el gran diseño
por adelantado y utilice marcos y arquitecturas de plantillas.
Se han realizado varios intentos para especificar qué constituye un enfoque ágil de la
arquitectura. Según el marco SAFe, los principios de la arquitectura ágil son:
Construya la arquitectura más simple que pueda funcionar (principios de diseño establecidos)
En caso de duda, codifíquelo o modelélo (picos, prototipo, dominio y modelos de casos de uso)
En el nivel de Arquitectura Empresarial, Scott Ambler (2016) propone los siguientes principios
Introducción
Desde sus comienzos a esta parte, las metodologías ágiles han logrado una gran conjunto de
adeptos. Hoy en día, una considerable cantidad de proyectos se desarrollan siguiendo algún
tipo de metodología ágil y una proporción muy grande de las que no utilizan una metodología
ágil formal, sigue, al menos, lineamientos e ideas provenientes de éstas. Incluso algunas
metodologías consideradas poco ágiles, como RUP, ensayan nuevas aproximaciones que las
hagan ver “más ágiles”. Varios ejemplos y referencias pueden encontrarse en {28} En este
contexto, la Arquitectura de Software como práctica de diseño no parece ser tratada con el
detenimiento que se merece. Prueba de ello es la escasa información disponible sobre esta
práctica en la documentación de las distintas metodologías ágiles. Otro factor de influencia, es
la falta de documentación estandarizada; hoy por hoy, no existe un lenguaje DDL estándar para
definir arquitecturas. Esto implica que no existe un formalismo estándar, como son los
diagramas de clases de UML, para documentar arquitecturas. En estos momentos, UML aún no
decidió cuál será, de los muchos lenguajes DDL existentes, el que se incluya en sus futuras
versiones. Creemos que el hecho de no tener debidamente en cuenta la Arquitectura de
Software como un proceso en sí mismo, dentro de cualquier proceso de desarrollo de software,
repercute en proyectos más riesgosos, con tareas y asignaciones distribuidas de manera
incorrecta y, por sobre todas las cosas, se evidencia en la calidad final del producto
Metodologías ágiles
¿Qué es desarrollo de software ágil (Agile Software
Development)?
A finales de los 90, varias metodologías comenzaron a atraer la atención del público en
general. Cada una de estas metodologías era una combinación de ideas viejas, ideas nuevas, y
variaciones de ideas viejas. Pero todas tenían algo en común: enfatizaban la colaboración entre
equipos de programadores y expertos de negocio; promovían la comunicación cara a cara
(como una manera más eficiente que la documentación escrita); realizaban entregas frecuentes
de nueva funcionalidad de negocio; contaban con equipos de desarrollo auto organizados;
tenían maneras de estructurar código fuente y equipos de desarrollo con el fin de que los
requerimientos más importantes no entren en crisis. {18} A principios de 2001, los pioneros y
creadores de estas metodologías reunieron, en una figura única, todo lo que sus metodologías
tenían en común, utilizando el término “Ágil” como definición común a todas ellas. De esta
forma, crearon lo que acordaron se en llamar: el manifiesto para desarrollo de software ágil
{19}. Algunos de los principios más importantes definidos en este manifiesto son: {18}
El término ‘ágil’ no describe una metodología particular, por el contrario, expresa la existencia
de una familia de metodologías, las cuales comparten las bases y lineamientos entre los que se
encuentran los enumerados anteriormente. Como ejemplo de metodología ágil, podemos citar,
entre muchas otras, a Scrum, ))Feature-Driven Development((, DSDM, Crystal, XP. {29, 30, 31,
32 y 6} respectivamente.
El código NO es el diseño
Debido a las fuertes críticas recibidas por la carencia de diseño formal, se han escrito algunas
contrapropuestas interesantes que defienden la postura de las metodologías ágiles. La mayoría
de las respuestas giran en torno al siguiente planteo, realizado por Fowler, el cual puede
encontrarse en {13}. El planteo dice lo siguiente: “¿Así que ha muerto el diseño? De ninguna
manera, pero la naturaleza del diseño ha cambiado. El diseño ágil busca las siguientes
habilidades:
1. Un deseo constante de mantener el código tan claro y simple como sea posible.
2. Habilidades de refactoración, para que puedas confiadamente hacer mejoras cuando
veas la necesidad.
3. Un buen conocimiento de patrones: no sólo las soluciones, sino también apreciar
cuándo usarlos y cuándo evolucionar hacia ellos.
4. Saber cómo comunicar el diseño a la gente que necesita entenderlo, usando código,
diagramas y, sobre todo, conversación”.
Otra justificación, un poco menos formal, pero aún así de amplia aceptación, es la siguiente: “el
código fuente es el diseño”{20}{21}. En ésta se argumenta lo siguiente: puede verse al código
fuente como el resultado final y visible del diseño, y en dónde quedan plasmados todos los
aspectos de éste. Esta idea, que es tomada de {21}, es llevada al extremo en algunas
metodologías ágiles, en donde el diseño no existe como etapa de desarrollo ni como generador
de algún artefacto formal. Sólo se tiene en cuenta como algo informal, útil para transmitir ideas
entre desarrolladores. La justificación es que con el refactoring continuo, el buen diseño se va
“encontrando” de a poco. Estas ideas definen la opinión sobre el diseño de muchas de las
metodologías ágiles y, sobre todo, de muchos de sus cultores. Si bien estas opiniones son un
tanto controversiales, es interesante rescatar su enfoque evolutivo, en contra de la postura
predictiva que tuvo históricamente el diseño.
Existen posiciones extremas, en algunos casos extremistas y hasta obtusas, entre las que se
encuentran: por un lado, las metodologías ágiles, diciendo que el código fuente es el diseño y,
por otro, los puristas clásicos pregonando diseñar pensando en el cambio. A pesar de estas
posturas, rescatamos algunas ideas, las cuales serán tenidas en cuenta en lo que resta del
paper. Estas ideas son:
no diseñar tanto para el cambio y sí tener en cuenta qué es necesario diseñar, cuándo
y en qué nivel de detalle,
aceptar que los requerimientos cambian y manejarlo de la manera más ágil, siempre
dispuesto al cambio sin reticencia
utilizar el enfoque iterativo e incremental, del cual se encuentran referencias en la
bibliografía desde el año 1977 (ver {10}).
El algoritmo de fuerza bruta con la heurística justa es el que utiliza información global, local y
que prevé el futuro, aunque sea a corto plazo. La heurística justa, sin duda, depende del
proyecto. Algunas ideas interesantes sobre adaptación de metodologías basadas en el tipo de
proyecto se pueden encontrar en {32}. Este tema tiene relación con la necesidad de brindar un
contexto a los trabajos de ingeniería de software basado en taxonomías de proyectos. {33} Con
la utilización de la arquitectura, buscamos definir una heurística -que debería ser adaptada
según la taxonomía del proyecto- que permita agilizar aún más la metodología en cuestión y
que aporte todos los beneficios, enumerados anteriormente, de la utilización de prácticas de
arquitectura en un proyecto de software.
Hacia un proceso de arquitectura de software ágil
La Arquitectura de Software puede y debe desempeñar un rol fundamental, en un escenario
donde el desarrollo de software tiende hacia formalización y automatización de procesos de
ingeniería, que brinden la seguridad y capacidad de predicción de otras disciplinas, como la
ingeniería civil. Sería de gran importancia contar con un proceso de Arquitectura de Software
capaz de acoplarse a cualquier metodología de desarrollo de software, en el que se distingan
claramente los beneficios de aplicarlo en cada etapa y las consecuencias de no tenerlo en
cuenta. Se plantean aquí algunos lineamientos y prácticas útiles para ser utilizados en
cualquier proceso de desarrollo de software, independientemente de la metodología utilizada.
Algunos de estos lineamientos son tomados de otros autores, en cuyo caso se hace referencia
a la fuente.
No jerarquizar el Rol
Ser arquitecto es sólo un Rol. Este rol puede ser desempeñado por cualquiera que tenga las
habilidades necesarias. Habría que considerar como muy importante no darle una concepción
divina al Rol. Quien lo desempeña no se encuentra en una posición superior, en el
organigrama, a ningún otro miembro del equipo.
Requerimientos de calidad
Los arquitectos deben tener una lista de requerimientos funcionales para el sistema y una lista
priorizada de atributos de calidad (tales como modularidad, modificabilidad, etc). {11} Los
atributos de calidad pueden estar categorizados y no deberían limitarse solamente a la calidad
del producto final, sino también a los requerimientos de calidad de diseño, de código, de
testing, de performance, etc.
Usar SAAM
Usar el Software Architecture Analysis Method {11} para analizar distintas arquitecturas
candidatas es un método en extremo sencillo y es muy útil para comunicar ideas. Se puede
usar en lugar de métodos más complicados, como ATAM {23}, que deberían ser tenidos en
cuenta sólo para determinados casos.
Hablar Patterns
Utilizar como parte del lenguaje cotidiano de trabajo los patterns, aunque sea sólo aquellos más
conocidos. Hoy por hoy, es difícil ver un desarrollador que no haya leído un libro de patterns. La
comunicación es un factor principal en un equipo que pretende utilizar una metodología ágil.
Resulta importante poder subir el nivel de abstracción y saber que todos los miembros del
equipo de desarrollo entienden cuando alguien dice: ‘esto es un composite, un delegate o un
DAO’. Algunas decisiones de diseño pueden tener implicancias sobre los atributos de calidad
del diseño y de la aplicación.{35}
Utilizar ABAS
Un ABAS (Attribute-Based Architectural Style){24} puede pensarse como una parte pre-
analizada de una arquitectura de software. Un ABAS se encuentra conformado por: (1) un
Architectural Pattern (Style); (2) la descripción de los componentes de software y sus
relaciones; (3) atributos de calidad relativos a estos componentes y cómo estos se conectan;
(4) un framework analítico que permita razonar sobre los atributos de calidad. La utilización de
ABAS permite la reutilización de partes de arquitecturas ya definidas. Además, permite dar una
aproximación segura, comprobada y medible a los atributos de calidad relacionados con el
architectural style. Es factible pensar que el correcto uso de architectural styles agilizará y
facilitará la toma de decisiones sobre arquitecturas. El uso de ABAS también facilita la
comunicación, de igual manera que “hablar patterns”.
Confianza en el equipo
El arquitecto debe conocer a su equipo de trabajo, de manera que pueda generarse en él la
confianza necesaria. De esta manera, el arquitecto podrá y deberá confiar en el equipo, debido
a que éste confía en él para que defina la mejor arquitectura posible dentro del contexto del
proyecto. Los lazos de confianza profesional son difíciles de mantener si no hay un sentimiento
recíproco.
No transferir responsabilidades
El desempeño de un profesional en un determinado rol le confiere derechos y obligaciones. El
rol de arquitecto tiene la obligación de no transferir la responsabilidad por las decisiones
tomadas y por el resultado final de la arquitectura. Si la arquitectura no cumple con los
requerimientos especificados, es pura y exclusivamente responsabilidad del arquitecto.
Arquitectura Simple
Mantenga la arquitectura lo más simple posible. Si la simpleza se traduce en facilidad de uso
de la arquitectura, facilidad para entender los conceptos involucrados y está bien documentada,
es muy probable que el nivel de productividad aumente. La simpleza de la arquitectura es
también un requerimiento de calidad.
Defina claramente los requerimientos
Defina claramente los requerimientos de calidad. La arquitectura debe poder medirse sobre la
base de una especificación de requerimientos de calidad bien documentada. El requerimiento
de calidad debe ser testeable. Por ejemplo, decir “el sistema debe ser estable”, relativo al
requerimiento de calidad ‘estabilidad’, no es formal ni testeable; pero un requerimiento de
calidad que diga “el sistema debe tener un 99,99 de disponibilidad”, es un requerimiento
testeable.
Releases Incrementales
Implemente releases incrementales que sean certificadas por el grupo de arquitectura. Cada
release debe ser arquitecturalmente válida. Esto quiere decir que la release debe respetar la
arquitectura actual. Es necesario tener en cuenta que la arquitectura, por estar comprendida
dentro de un entorno ágil, muy posiblemente evolucione y cambie, pero siempre deberá
respetar los requerimientos de calidad.
Aportes
En el presente artículo, se muestra la necesidad de implementar prácticas tradicionales de
Arquitectura de Software con un enfoque ágil, en proyectos que implementen cualquier tipo de
metodologías. Se aportan lineamientos útiles para la implementación de las prácticas de
arquitectura de manera ágil. En este trabajo no se discute cómo deben aplicarse estos
lineamientos, ni en qué estadio del proceso. Se sientan las bases para desarrollar un proceso
de arquitectura ágil, que sea posible implementar dentro del contexto de cualquier metodología
y/o proceso de desarrollo.
Trabajo Futuro
Como extensión al trabajo realizado, podemos plantear la definición de un proceso de
desarrollo y especificación de arquitecturas de software ágil que pueda implementarse en el
contexto de cualquier metodología. Muchos de los lineamientos expuestos aquí pueden ser
extendidos, mostrando ejemplos de uso, contextualizándolos en un dominio de problema
adecuado.
Conclusiones
En este artículo se plantea la necesidad de definir un proceso de Arquitectura de Software que
sea capaz de asociarse con cualquier metodología de desarrollo existente. Se buscó también,
cubrir la necesidad de que este proceso sea ágil, de manera tal que pueda ser utilizado tanto
en procesos ágiles como tradicionales. Como una primera aproximación a la resolución de este
problema, se plantean algunos lineamientos que deberían ser tenidos en cuenta al momento de
realizar una arquitectura para cualquier proyecto de desarrollo de software. Algunos de los
lineamientos fueron recopilados de la bibliografía existente sobre el tema y algunos otros son
aportes originales del presente trabajo. Todos los lineamientos propuestos están basados en
estándares aceptados del mercado o de trabajos de reconocido nivel académico. La
originalidad del planteo no sólo radica en su utilización para agilizar un proceso arquitectónico,
sino también en la propuesta de varios lineamientos.
Su historia
Los tiempos cambian y la tecnología evoluciona. Hace apenas unos años, lo corriente
era que las grandes aplicaciones necesitaran decenas de servidores, tardaran muchos
segundos en dar una respuesta y requirieran de constante mantenimiento. Estas
limitaciones, impuestas por sistemas de programación obsoletos, se convirtieron en
obstáculos para empresas que crecían vertiginosamente y que necesitaban soluciones
de software ágiles. Ante este problema, un grupo de ingenieros, liderados por Jonas
Bonér, publicó en el 2013 un documento denominado Reactive Manifesto, en el que se
sugiere darle un nuevo enfoque a la arquitectura de sistemas, con el fin de que los
programas y aplicaciones informáticos sean más flexibles, independientes y escalables.
El cambio
La definición
De acuerdo con el manifiesto, los sistemas reactivos son una serie de principios de
diseño, cuyo propósito es construir sistemas modernos, preparados para satisfacer las
exigencias, cada vez mayores, de las aplicaciones actuales. Su flexibilidad y
escalabilidad los hace más fáciles de desarrollar y modificar. También toleran mejor las
fallas, y cuando estas ocurren, se corrigen automáticamente antes de que se
desencadenen problemas mayores. Un sistema reactivo es en esencia:
Las ventajas
Para cualquier organización, contar con sistemas basados en una arquitectura reactiva
representa grandes ventajas. En un mundo en el que tecnologías como la computación
en la nube y el Internet de las cosas exigen una mayor capacidad de las aplicaciones
actuales, asegurar un menor tiempo de respuesta a los usuarios finales significa ir un
paso adelante de la competencia. Asimismo, un sistema eficiente consume menos
recursos (tiempo, energía, memoria), es más amigable con el medio ambiente, y resulta
más rentable para la empresa, al igual que asequible para los consumidores.
Estos cambios están sucediendo porque los requerimientos de las aplicaciones han cambiado
drásticamente en los últimos años. Sólo unos pocos años atrás, una aplicación grande tenía
decenas de servidores, segundos de tiempo de respuesta, horas de mantenimiento fuera de
línea y gigabytes en datos. Hoy, las aplicaciones se desplegan en cualquier cosa, desde
dispositivos móviles hasta clusters en la nube corriendo en miles de procesadores multi-core.
Los usuarios esperan que los tiempos de respuesta sean de milisegundos y que sus sistemas
estén operativos el 100% del tiempo. Los datos son medidos en Petabytes. Las demandas de
hoy simplemente no están siendo satisfechas por las arquitecturas software de ayer.
Se necesita un enfoque coherente para la arquitectura de sistemas, y se cree que todos los
aspectos necesarios ya han sido identificados por separado: queremos sistemas Responsivos,
Resilientes, Elásticos y Orientados a Mensajes. Se les llama Sistemas Reactivos.
Los sistemas construidos como Sistemas Reactivos son más flexibles, con bajo acoplamiento
y escalables. Esto hace que sean más fáciles de desarrollar y abiertos al cambio. Son
significativamente más tolerantes a fallos y cuando fallan responden con elegancia y no con un
desastre. Los Sistemas Reactivos son altamente responsivos, dando a los usuarios un feedback
efectivo e interactivo.
Responsivos
El sistema responde a tiempo en la medida de lo posible. La responsividad es la piedra angular
de la usabilidad y la utilidad, pero más que esto, responsividad significa que los problemas
pueden ser detectados rápidamente y tratados efectivamente. Los sistemas responsivos se
enfocan en proveer tiempos de respuesta rápidos y consistentes, estableciendo límites
superiores confiables para así proporcionar una calidad de servicio consistente. Este
comportamiento consistente, a su vez, simplifica el tratamiento de errores, aporta seguridad al
usuario final y fomenta una mayor interacción.
Basicamente un sistema que siempre responde de acuerdo a las exigencias del negocio.
Resilientes
El sistema permanece responsivo frente a fallos. Esto es aplicable no sólo a sistemas de alta
disponibilidad o de misión crítica - cualquier sistema que no sea resiliente dejará de ser
responsivo después de un fallo. La resiliencia es alcanzada con replicación,
contención, aislamiento y delegación. Los fallos son manejados dentro de cada componente,
aislando cada componente de los demás, y asegurando así que cualquier parte del sistema
pueda fallar y recuperarse sin comprometer el sistema como un todo. La recuperación de cada
componente se delega en otro componente (externo) y la alta disponibilidad se asegura con
replicación allí donde sea necesario. El cliente de un componente no tiene que
responsabilizarse del manejo sus fallos.
Elásticos
Orientados a Mensajes
Los Sistemas Reactivos confían en el intercambio de mensajes asíncrono para establecer
fronteras entre componentes, lo que asegura bajo acoplamiento, aislamiento y transparencia
de ubicación. Estas fronteras también proporcionan los medios para delegar fallos como
mensajes. El uso del intercambio de mensajes explícito posibilita la gestión de la carga, la
elasticidad, y el control de flujo, gracias al modelado y monitorización de las colas de mensajes
en el sistema, y la aplicación de back-pressure cuando sea necesario. La mensajería basada en
ubicaciones transparentes como medio de comunicación permite que la gestión de fallos
pueda trabajar con los mismos bloques y semánticas a través de un cluster o dentro de un solo
nodo. La comunicación No-bloqueante permite a los destinatarios consumir recursos sólo
mientras estén activos, llevando a una menor sobrecarga del sistema.
Conclusiones
Los sistemas grandes están compuestos de otros más pequeños y por lo tanto dependen de las
propiedades Reactivas de sus partes. Esto significa que los Sistemas Reactivos aplican
principios de diseño para que estas propiedades sean válidas a cualquier escala, haciéndolas
componibles. Los sistemas más grandes del mundo confían en arquitecturas basadas en estas
propiedades y atienden las necesidades de miles de millones de personas diariamente. Es
tiempo de aplicar estos principios de diseño conscientemente desde el inicio, en vez de
redescubrirlos cada vez.
No olvidemos que la premisa de este tipo de arquitecturas es responder a las necesidades del
dominio o negocio por lo que por ejemplo "tiempos de respuesta optimos" van acorde a lo que
se espera dentro del negocio, y lo principal es tener disponibilidad, poder crecer o decrecer de
acuerdo a la carga, aislar la propagacion de errores y tener bajo acoplamiento en cada uno de
los componentes por todo lo anterior, el diseño, desarrollo e implantacion de este tipo de
sistemas puede parecer costoso pero si es de una ayuda para el negocio podria convertirse en
nuevas oportunidades y modelos de negocio que apoyarian la gestion empresarial.
Los países del Tercer Mundo no pueden hacer frente en el marco político actual
al cúmulo de necesidades de sus pobladores, igualmente los pobladores pobres
del llamado 4º mundo, que intentan ferozmente acceder a una vivienda digna y a
un precio accesible. Por ello debemos inevitablemente re-fundar también,
nuestra visión y posición “arquitectónica” desde la Urgencia y la Necesidad,
dejando de lado esta visión mediocre y frustrante, en la que se maneja la
arquitectura de autor, actual.
Sin embargo, yo no puedo quitar el ojo de la realidad que nos envuelve, y que
muchas veces, los arquitectos la obviamos, o definitivamente “no nos
interesa”.
Si bien es cierto que el arquitecto es quien resuelve con arte las necesidades
del cliente, el arquitecto con el uso ético de su oficio puede persuadir al
cliente de utilizar inadecuadamente el arte en la construcción, pero “la
acción persistente de una artisticidad mal entendida, mezclada con la
doctrinaria creencia en una misión pedagógico-social de la arquitectura, y
unas gotas de “libertad creadora” fundamentalista, lleva a ciertos arquitectos
a proferir simplezas de tal calibre que hacen tambalear gravemente el
prestigio social de la profesión” (4).
La arquitectura globalizada aparta de su “hacer proyectual” a la pobreza
mundial, es decir, ese 80% del mundo que no puede detenerse a “admirar” las
últimas tendencias en “esculturas arquitectónicas”... simplemente porque
necesita “urgentemente” de un techo y cuatro paredes para guarecerse del mundo
que lo ignora (5). La modernidad sigue siendo una deuda pendiente cada vez más
“evidente” y “urgente” y que el movimiento moderno prometió, “como posible”.
Las propia Organización de las Naciones Unidas en 2005 afirmó que 4 de cada 5
seres humanos sufren procesos de desigualdad, por ello debemos recocer que la
pobreza es el desafío más grave para los derechos humanos en el mundo, tanto
si se mide por el número de personas afectadas (16) como por el efecto
acumulado sobre toda una gama de derechos humanos. Y añadimos a la
arquitectura, ya que los ciudadanos tienen derecho a la vivienda y derecho a
la ciudad.
A modo de conclusión
Este ensayo partió de la inquietud del autor al leer, por ejemplo: “Aunque el
crecimiento de África es impresionante, la mayor parte de sus mil millones de
habitantes viven aún en la pobreza, asediados por sequías, hambrunas y
enfermedades como la malaria y el sida...()... Y en este magma cambiante
aparecen de cuando en cuando obras de arquitectura de valor singular, que
reconcilian tradición y modernidad para transmitir un mensaje de confianza en
el futuro de un continente que sin duda se la merece” (18).
Dicen los autores Mireia Belil y Jordi Borja: “La ciudad es el horizonte
humano del siglo XXI. A inicios de este siglo, haciendo un cálculo optimista
apenas un 25% de la población mundial vive en ciudades y no siempre en
condiciones de ejercer sus teóricos derechos ciudadanos. Otro 25% puede
considerarse población rural, mayoritariamente agrícola o ganadera. ¿Y el otro
50%? En muchos casos las estadísticas globalizadas nos dirán que es gran parte
población urbana. Puede ser, si entendemos que viven en áreas consideradas
administrativamente como urbanizadas, o mejor dicho suburbanas o periurbanas,
o radicalmente marginales. Unas áreas que por la “exclusión territorial” y por
su carácter de ghetto que las caracteriza difícilmente pueden considerarse
“ciudad”. Ni dar por sentado que su población vive en ciudades y menos aun que
sus habitantes disfrutan de status de ciudadanos” (21).
¿Cómo enfrentar de manera eficiente el creciente deterioro de la estructura
social de la pobreza en el mundo?; ¿cómo intervenir desde la arquitectura,
para incluir “también” a ese 60% de la población excluida de los planes
urbanísticos?; ¿cómo aglutinar a los grupos de población y comunidades que
viven en condiciones de vulnerabilidad social desde la investigación
arquitectónica?
Por ello, o usamos nuestra energía creativa enfocada hacia esta arquitectura
autoritaria y díscola, o nos esforzamos y apostamos por la creación de una
arquitectura autogestiva, poética, alegre, democrática… En definitiva, una
arquitectura apropiada.
ntroducción a la
Arquitectura reactiva:
qué es, principios y
lenguajes, plataformas…
PUBLICADO EN 06/08/2018
Principios de la programación
reactiva
Dirigida por datos
En el modelo de actores, uno de los patrones más utilizados
en programación reactiva, se definen cadenas de
transformación funcional. Estas son atravesadas por flujos
de datos para su procesamiento. Se podría decir que este
tipo de soluciones están dirigidas por los datos porque en
ellos descansa, además de gran parte de la lógica de la
aplicación, el propio comportamiento reactivo del sistema.
Centrada en la composición
Las operaciones que forman parte del procesamiento de datos
en programación reactiva, que normalmente se
implementan en actores distintos, se encadenan de forma
compositiva. De este modo, el resultado de cada
transformación es la entrada para la siguiente. Para poder
articular esta composición adecuadamente, debemos tener en
cuenta tres reglas fundamentales en la programación
funcional:
Transparencia referencial
El valor de retorno de las funciones depende de los
parámetros de entrada, nunca de condiciones ambientales
(parámetros externos o contexto).
Principales lenguajes y
plataformas de la programación
reactiva:
Como ya se ha dicho antes, la programación reactiva implica
el conocimiento y la integración de varios lenguajes de
programación y plataformas, como podrían ser:
Evolución de Arquitecturas y
aplicaciones Empresariales
Los requerimientos de las aplicaciones han cambiado
drásticamente en los últimos años. Solo unos pocos años
atrás, una aplicación grande tenía decenas de servidores,
segundos de tiempo de respuesta, horas de mantenimiento
fuera de línea y gigabytes en datos, lo que hacía necesario su
procesamiento. Luego se incorporaron los ERP y CRM a las
webs con arquitecturas cliente/servidor y finalmente a las
aplicaciones modernas actuales, basadas en
los microservicios, los contenedores virtuales y el Big
Data. Estos últimos basados en componentes de código
abierto y/o software libre.