Arquitectura de Software 07 Jul 2006 08:24 pm
Reusabilidad II: Middleware
No perdamos de vista el objetivo pricipal de todo esto de la ingeniería del software: Currar menos pero mejor.
Así están las cosas y el mismo concepto puede nombrarse usando el término - quizás más correcto en una entrevista de trabajo - de Reusabilidad.
La reusabilidad de código y diseños es fundamental en el proceso de desarrollo de software, porque al reutilizar escribimos menos código que, además de mejorar la productividad, reduce la cantidad de fallos cometidos y los periodos de pruebas y consigue que la calidad y solidez general del producto se vea incrementada.
Middlewares, frameworks y patrones son conceptos diferentes pero interrelacionados que pretenden incrementar la reusabilidad.

Un Middleware es un software que puede incrementar significativamente la reusabilidad mediante soluciones utilizables rápidamente y basadas en estándares aplicables a problemas y tareas comunes en programación.
La idea es que los desarrolladores se puedan concentrar en asuntos propios de la aplicación y olvidarse de problemas comunes - estructurales o no - ya resueltos previamente de forma elegante y satisfactoria. CORBA (Common Object Request Broker Architecture) es un middleware estándar que surge la la organización internacional OMG. Otros estándares como JVM, J2EE y .NET han surgido de consorcios industriales y líderes en diferentes áreas del mercado.
Para el desarrollo de los diferentes middlewares son cruciales los patrones de diseño y los frameworks. Es común que los middlewares se desarrollen usando frameworks que se basan a su vez en patrones de estrategias de composición y optimización. Entre los tres tipos de abstracción se aprovechan muchas sinergías. El tipo de middleware en el que yo estoy interesado es el orientado a aplicaciones distribuidas en red.
Normalmente podemos descomponer un middleware en sus capas de igual forma a como se hace con los protocolos de red.
Empezando de abajo arriba y obviando las capas de dispositivos hardware y la de los sistemas operativos:
Middleware de Infraestructura de Servidor
Sirve para abstraerse y mejorar los mecanismos nativos proporcionados por los sistemas operativos subyacentes. Proporciona mecanismos resusables para manejo de la demultiplexación de de eventos, comunicación entre procesos, concurrencia y sincronización por nombrar algunos ejemplos. Abstrayendo estos mecanismos y las peculiaridades de los diferentes SO creamos objetos reusables que ayudan a eliminar los aspectos tediosos y tendentes a errores, además de poco portables, de bregar con los detalles de bajo nivel de cada sistema operativo (SO). Ejemplos de este tipo de middleware son la máquina virtual de Java (JVM), y el Common Language Runtime (CLR) de Microsoft. ACE encaja dentro de esta categoría.
Middleware de Distribución
Proporcionan un modelo de programación distribuida de más alto nivel cuyos objetos e interfaces automatizan y extienden la funcionalidad de los SOs encapsulada por la capa anterior de infraestructura de servidor. Nos permite programar aplicaciones llamando a operaciones en los objetos destino olvidándonos de dependencias como la localización, el lenguaje de programación, SO, plataforma, protocolos de comunicación y hardware. En esta categoría se encuentran CORBA y Java Remote Invocation (JRI) de Sun. SOAP (Simple Object Access Protocol) es un marco extensible y descentralizado que permite trabajar sobre múltiples pilas de protocolos de redes informáticas. Los procedimientos de llamadas remotas pueden ser modelados en la forma de varios mensajes SOAP interactuando entre sí, y permite el intercambio de información estructurada (XML) en la Web utilizando diferentes protocolos tales como HTTP, SMTP y MIME.
Middleware de Servicios Comunes
Mejoran el middleware de distribución definiendo servicios reusables de más alto nivel e independientes de dominio, que permite a los desarrolladores de aplicaciones centrarse en la programación y el diseño de la lógica del negocio, evitándose la necesidad de escribir el código que tendrían que escribir para aplicaciones distribuidas si usaran middleware de capas más bajas. Ejemplos de servicios ofrecidos son toda la capa transaccional, seguridad o pooles de conexión a base de datos, de manera que el programador no tenga que realizar más esas tareas utilizando un modelo de componentes y lenguajes sencillos por lotes.
Middleware de Dominio Específico
Los servicios en este caso están asociados y enfocados a determinados dominios como pueden ser las telecomunicaciones, el comercio electrónico, o el campo de la salud y la medicina.
En la próxima entrada tratare de aclarar (y aclararme) qué puñetas es un framework, para qué sirve y por qué es interesante usarlos.
Os dejo el enlace al pedazo de bitácora hermana de Justo Hidalgo con parecidas ambiciones a la presente bitácora. Merece la pena bucear en sus entradas si te interesa la ingeniería del software y tienes una mente inquieta.
¿Está claro que aportación realmente orginal hay poca en este artículo y en general en todo lo que escribo? Reconozco que copio de varios sitios y no tengo ganas de - ni capacidad de acordarme de - referenciarlos a todos.