sábado, 14 de julio de 2007

Sobre los retos de la persistencia

El "ceviche mixto" lo había planteado como una mezcla del lenguajes utilizados por el programador, por ejemplo código Java o C# salpicado de sentencias SQL que se llaman mediante el mecanismo de conectividad como JDBC o ADO.NET.

Grafiquemos el problema en un sistema de punto de ventas, una factura está compuesta por un encabezado donde se colocan los detalles del negocio, del cliente y del número de factura, luego viene una lista de los productos y por último el pié de página donde se observa el sub-total, los descuentos, el impuesto y el gran total.

Tradicionalmente un módulo de ventas, es un conjunto de sentencias SQL que son llamadas desde, digamos, una aplicación hecha en Delphi. Si la sentencia SQL es para generar un nuevo número de factura, se la ejecuta y se coloca el resultado en algún control visual (una caja de texto o etiqueta). El asunto suena muy trivial, la consulta es sobre una tabla de facturas de donde toma la última venta en base a la cual calcula el nuevo número. Pero que tal si el dueño del negocio le quiere un cambio y expresa “quiero que en el número de factura conste la fecha y un número secuencial, por ejemplo 20070708-001, 20070708-002, 20070708-003, etc.”. El esquema empieza a desmoronarse, porque además la estructura de facturación del sistema también puede cuestionarse.

La adaptación del sistema de punto de ventas (POS) en el mejor de los casos comienza a ser re-elaborado.

El software monolítico no tiene cura, cae por su propio peso, pero un software bien diseñado separa la lógica de negocios de la mecánica de persistencia. Un objeto es el que vive los algoritmos almacenados en sus métodos, pero otro es el que toma su estado y los persiste (almacena en una base de datos, en un archivo, etc.) o recupera el estado persistido para generar un nuevo objeto de negocios. Ambas clases son cambiables, si el entorno de un sistema implica persistencia sobre Oracle, en otro puede ser MySql, eso tiene incidencia en la mecánica de persistencia no en la lógica de negocios, es decir que otro criterio clave será todo aquello relacionado con el polimorfismo e Interfaces.