De las aplicaciones monolíticas a traspasar el umbral de las dos capas

Actualmente existen básicamente tres sistemas o modelos de desarrollo de aplicaciones: monolítico, cliente/servidor y distribuido. El primero es el sistema tradicional que, con el tiempo, ha dado paso a la arquitectura cliente/servidor que se usa desde hace unos años. Actualmente el sistema preferente es el distribuido, una evolución lógica de la arquitectura cliente/servidor tradicional.

Una aplicación monolítica se caracteriza por ser un bloque indivisible en el que se gestionan los datos, particularmente su almacenamiento y recuperación, se establecen las reglas de negocio y, además, se controla la interfaz que utilizará el usuario. Se trata de una construcción que tiene como principal ventaja su simplicidad de desarrollo, simplicidad que después se paga con un difícil mantenimiento y una compleja distribución. Cualquier cambio en la base de datos subyacente o una alteración en el proceso de los datos fuerza a una reinstalación en todos los clientes. Este tipo de aplicaciones suelen requerir máquinas con gran capacidad de proceso, ya que todo el trabajo se desempeña en el puesto sobre el que operará el cliente.

La aparición de la arquitectura cliente/servidor supuso un gran salto cualitativo, al favorecer el reparto de trabajo y la separación de un elemento fundamental: la gestión de los datos, de las reglas de negocio y la interfaz de usuario. En un entorno cliente/servidor típico existe un servidor, generalmente ejecutando un SGBD, al que se conectan múltiples clientes. Éstos siguen ejecutando las reglas de negocio y son la interfaz con el usuario final. La mayor ventaja de esta arquitectura es la posibilidad de efectuar una gestión centralizada de los datos, lo cual conlleva un mantenimiento más simple. No obstante, los cambios sobre el SGBD pueden implicar cambios en las reglas de negocio lo que, en consecuencia, acarrearía el mismo problema que en las aplicaciones monolíticas, al tener que tocar la aplicación cliente en todos los puestos en que se encuentre funcionando.

Tras la aparición de los entornos distribuidos, a la arquitectura cliente/servidor se la conoce también como de dos capas, al existir un servidor y un cliente. En un entorno distribuido existen tres o más capas, típicamente un servidor de datos, un servidor de aplicaciones y los clientes. Esta configuración, no obstante, puede extenderse incorporando varios servidores de componentes, datos e, incluso, elementos que actúan como clientes y servidores de forma simultánea.

Desarrollar aplicaciones para entornos distribuidos es, en principio, más complejo que para cualquiera de los dos modelos mencionados antes. Dicha complejidad se incrementa ya que en entornos de este tipo es habitual la coexistencia de plataformas y sistemas operativos diferentes, así como elementos de aplicación desarrollados con distintos lenguajes. Como contrapartida se obtiene una gran sencillez a la hora de mantener y distribuir las aplicaciones, gracias a la separación de sus elementos, así como una gran escalabilidad que no puede ofrecer la tradicional arquitectura cliente/servidor.

En una aplicación distribuida es posible alterar una regla de negocio sin afectar a los clientes, ya que éstos tan sólo ejecutan la interfaz de usuario. Un cambio en la estructura de datos podría afectar a las reglas de negocio, pero éstas se encuentran separadas y son fácilmente actualizables.
Los clientes, como consecuencia, pueden ser prácticamente de cualquier tipo, desde aplicaciones tradicionales que usan componentes hasta clientes Web. Los sistemas que usan los clientes no necesitan una gran potencia, ya que la mayor parte del trabajo se desarrolla en los servidores de aplicaciones y datos.