Script de Transacción en Arquitectura de Software
Clase 12 de 24 • Curso de Arquitecturas Limpias para Desarrollo de Software
Resumen
¿Qué es un script de transacción?
El script de transacción es un enfoque organizativo que se centra en estructurar la lógica de negocio en procedimientos específicos. Esta metodología está descrita en profundidad en el libro "Patterns of Enterprise Application Architecture" de Martin Fowler. Este enfoque busca que cada procedimiento maneje una única solicitud de la capa externa, por ejemplo, registrar una factura. En este caso, cada solicitud se convierte en una operación aislada y transaccional.
¿Cómo se organizan los procedimientos?
Existen dos maneras de estructurar los procedimientos en el script de transacción:
-
Jerarquía de Herencia: Se crea una clase base o interfaz denominada
TransactionScript
que contiene un método, comúnmente llamadorun
,ejecutar
oexecute
. Cada procedimiento se desarrollará en su propia clase derivada. Este enfoque promueve la claridad de las responsabilidades de cada clase. -
Servicio Único con Múltiples Operaciones: En esta estructura, un único servicio agrupa diversas operaciones relacionadas, organizándose por funcionalidad o tipo de dato. Aunque este método es efectivo para aplicaciones pequeñas, puede presentar problemas de cohesión y crecimiento descontrolado de las clases.
Exploración del código del script de transacción
El ejemplo práctico de un script de transacción se desarrolla con Java, usando Maven para gestionar las dependencias. Este script se focaliza en un sistema para gestionar vuelos, ilustrando elementos de la arquitectura limpia.
Componentes clave
-
Dominio y capa externa: El sistema se estructura en capas, con un dominio que contiene el modelo de dominio y la aplicación, y una capa externa que incluye una consola y las funcionalidades de persistencia.
-
Servicio de aplicación: Este servicio contiene las implementaciones del script de transacción. Aquí se aseguran operaciones como buscar vuelos, con validaciones de datos de entrada y búsqueda en un repositorio para obtener información.
public class FlightService { private FlightRepository flightRepository; public Flight searchFlights(String origin, String destination, Date date, int passengers) { // Validaciones de entrada de datos List<Flight> availableFlights = flightRepository.findFlights(origin, destination, date, passengers); // Procesamiento y retorno de resultados return availableFlights; } }
-
Objetos POJO: Las entidades, como
Flight
, son objetos Java simples, denominados POJOs, que contienen atributos y métodosget
yset
.
Ventajas y limitaciones del script de transacción
El script de transacción es ideal para aplicaciones con lógica de negocio sencilla. Sin embargo, a medida que la aplicación crece, surgen ciertas desventajas:
-
Dificultades de mantenimiento: Con el incremento de la lógica de negocio, los procedimientos se tornan extensos y complicados, erosionando la ventaja de un dominio bien organizado.
-
Falta de aprovechamiento de POO: El script de transacción separa la operación y los datos, lo que impide el aprovechamiento integral del paradigma de programación orientada a objetos. En lugar de combinar operaciones con datos, se limita a seguir instrucciones procedimentales.
Cuándo utilizar el script de transacción
Este enfoque es adecuado para aplicaciones sencillas con lógica de negocio elemental. Sin embargo, no se recomienda para arquitecturas limpias que persiguen un dominio extendido y bien organizado, ya que el script puede complicar el mantenimiento y evolución del software.
Próximos pasos
A continuación, se explorará la inyección de dependencias, con el objetivo de clarificar cómo el script de transacción gestiona la persistencia y mejora la modularidad del código.
Este abordaje metodológico, junto con una adecuada gestión de las dependencias, puede ofrecer una mayor claridad y cohesión en la estructura de una aplicación, a pesar de las complejidades inherentes a su implementación.