El camino hacia una arquitectura software limpia - Hexagonal, Onion y Clean Architecture
¿Te interesa la arquitectura software? Espero que sí porque éste es uno de esos aspectos que deberían interesarte sea cual sea tu nivel de experiencia dentro...
Muy fácil de comprender: primero se hace el pedido de la pizza, luego se cocina y finalmente se sirve al cliente.
Pero en el mundo real los procesos son mucho más detallados y complejos y pueden requerir la ejecución de tareas en paralelo, bifurcaciones según algún tipo de condición, repetición de tareas, comunicación entre procesos, reacción ante eventos, control de errores, distribución de tareas por roles, etc.
Este sería un ejemplo del proceso ‘pizza’ un poco más complejo pero más cercano a la realidad:
(fuente: www.bpmn.info)
Bien, pues BPM (Business Process Management -Gestión de Procesos de Negocio-) podría definirse como un “enfoque disciplinado para identificar, diseñar, ejecutar, documentar, medir, monitorear y controlar procesos de negocio, con el objetivo de lograr resultados alineados con las metas estratégicas de la organización” (definición obtenida del libro “BPM Common Body of Knowledge”).
Si gestionamos los procesos de nuestro negocio aplicando BPM podremos obtener, entre otros, los siguientes beneficios:
Esta disciplina se fundamenta en el siguiente ciclo de vida:
Diseño del proceso Es la etapa donde se diseñan y construyen los diagramas de procesos usando la notación gráfica BPMN (Business Process Modeling Notation). Se trata de un diseño de alto nivel elaborado normalmente por gerentes y analistas de procesos.
Modelado (Implementación) El diseño teórico se amplía añadiendo lógica que permita que el proceso pueda ser automatizado y ejecutado por un sistema software. Se definen formularios de usuario, reglas de ejecución, acceso a datos, scripts, etc. En esta fase intervienen administradores de sistemas y desarrolladores.
Ejecución El proceso entra en ejecución y es utilizado por las personas, herramientas y/o sistemas. El diagrama diseñado y modelado en las etapas anteriores ahora es interpretado por un motor de procesos dentro de una solución software. Se forma al personal, se establecen metas y se obtienen resultados tangibles.
Monitorización Se realiza un seguimiento del proceso. Se recopila, analiza y procesa información para la toma de decisiones, detección de desviaciones y para proponer posibles mejoras.
Optimización A partir de la información obtenida en la fase de monitorización se aplican las correcciones y mejoras necesarias en el proceso.
BPMN (Business Process Model and Notation -Modelo y Notación de Procesos de Negocio-) es una notación gráfica estandarizada por OMG (Object Management Group) que permite el modelado de procesos de negocio en un formato de flujo de trabajo (workflow). Su objetivo es ofrecer una notación estándar que sea entendible para todos los interesados del negocio (stakeholders): gerentes, analistas, administradores, desarrolladores, etc. Los procesos mostrados en el apartado anterior están diseñados con BPMN.
BPMN se centra en la siguiente simbología:
Son unidades de trabajo que representan una actividad desempeñada por un participante. Ese participante puede ser una persona, un script, una clase Java, etc.
Describen algo que sucede durante la ejecución del proceso. Hay multitud de eventos definidos en BPMN: para control de tiempos, cancelaciones, reacción ante errores, envío y recepción de mensajes, etc. Y, por otro lado, los eventos pueden iniciar un proceso, finalizarlo o participar durante el flujo del proceso (intermediate).
Aquí puedes ver una tabla completa de eventos.
Representan flujos de ejecución en el proceso.
Una compuerta o gateway representa un punto de decisión donde a partir de unos datos de entradas se toma una determinada decisión y se canaliza la salida por uno o varios caminos.
Como su nombre indica sirven para contener otras actividades y agruparlas para un mismo objetivo, como por ejemplo agrupar actividades según el rol de la persona o personas que las va a ejecutar, o agrupar actividades en un subproceso
Son símbolos que ayudan a la comprensión y documentación del proceso pero que no tienen implicación directa sobre el flujo de ejecución.
Te recomiendo echar un vistazo a este PDF que resume toda la simbología de BPMN 2.0 (la versión actual de BPMN es la 2.0.2). Y si quieres profundizar en el tema aquí tienes la especificación formal del estándar.
¿Qué debe tener una solución software para poder ser considerada útil dentro del ámbito de BPM?
workflow Es el corazón de BPM, el motor de ejecución de procesos. Permite automatizar, sincronizar e integrar procesos. Es el que se encarga de entender y ejecutar el flujo de tareas, eventos y operaciones que tienen definidos los procesos.
Integrador de aplicaciones Permite compartir datos y procesos entre diferentes programas de la organización, independientemente de la plataforma y tecnología. Se refiere a la arquitectura tecnológica que permite comunicar los procesos con otros servicios y/o componentes, por ejemplo con el servicio de gestión de usuarios, con el servicio de permisos, facturas, comunicaciones de red o con cualquier otro servicio que de sentido al negocio de la organización (CRM, ERP, ITIL, gestión documental, eCommerce, …).
Integrador de negocios Permite a los actores externos de la organización interactuar con sus procesos de una forma ágil, flexible y dinámica. Digamos que es la aplicación software con la que operan los usuarios: una aplicación Web, una aplicación de escritorio, una destinada a dispositivos móviles, o todo a la vez. Este integrador será el encargado de organizar la información y mostrarla al usuario, de presentar los formularios, de permitir ejecutar acciones, etc.
Herramientas de monitorización Permiten recopilar, procesar y distribuir información sobre el funcionamiento de los procesos. Estas herramientas nos permiten obtener informes útiles para la toma de decisiones y/o proveer datos para aplicar técnicas de gestión del rendimiento corporativo (CPM - Corporate Performance Management) dentro del área de Business Intelligence (BI), cumplimiento de los KPI (Key Performance Indicator), retorno de la inversión (ROI), etc.
El concepto de BPM es muy amplio y abarca multitud de conceptos como BPA (análisis), BRE (reglas), EAI (integración), BPMS (orquestación), BAM (monitorización), BI (reporting), etc.
A continuación enumeraré y describiré los principales frameworks Java open source que tenemos a nuestra disposición para afrontar una arquitectura software BPM como la que he mencionado anteriormente:
Potente paquete de proyectos integrados. Es una suite completa para BPM con multitud de herramientas y utilidades. Es uno de los frameworks que más tiempo lleva en el mercado. Es bueno para incluir en un proyecto iniciado desde cero, pero para integrarlo en una aplicación ya existente (por ejemplo un ERP) es un poco complejo de configurar y tiene muchas dependencias. Está muy orientado a la gestión del flujo de trabajo mediante reglas Java Drools. Es un proyecto de JBoss. Tiene un plugin de modelado de diagramas BPMN para Eclipse.
Su eslogan es “Bonita BPM: La plataforma más poderosa de aplicaciones basada en BPM. Todo lo que necesita para construir aplicaciones de negocio atractivas y personalizadas que se adapten a su negocio en tiempo real.” Es un set de herramientas más un entorno de desarrollo integrado. Tiene un workflow Open Source y una solución software completa para BPM. La aplicación puede adquirirse en dos versiones: la “Community Edition”, que es open source; y la “Subscription Edition” que ofrece soporte, personalización de interfaces de usuario, etc.
La suite incluye:
Está poco orientado a desarrolladores, su enfoque está más destinado a analistas, gestores y administradores de procesos. Está pensado para ofrecer todas las herramientas necesarias para el manejo de procesos, pero no tanto para usar su “core” e integrarlo en otros proyectos. Toda la configuración e implementación de procesos se realiza a través de sus herramientas, sin necesidad de escribir una sola línea de código, lo cual, de cara a un desarrollador, se traduce en pérdida de control y dificultad para la personalización. Su finalidad última es comercial (dar soporte, mantenimiento, formación, etc.) por lo que no es fácil encontrar mucha documentación técnica sobre su motor de procesos.
Activiti es principalmente un motor de procesos BPMN 2 ligero, rápido y robusto para proyectos Java. Es de código abierto y distribuido bajo licencia Apache. Se ejecuta en cualquier aplicación Java, en un servidor, en un clúster o en la nube. Activiti es un proyecto de Alfresco (es el motor de procesos que usa Alfresco), pero es un proyecto independiente. El core es similar a jBPM (Activiti está creado por los fundadores de jBPM). Está muy orientado al desarrollador. El motor (el ‘process Engine’) es ofrecido a través de un API Java independiente y de fácil manejo. Y luego ofrece diferentes jars para ampliar sus características (comunicación por REST, integración con Spring, CDI, Camel, OSGI, etc.). Incluye una aplicación Web para la gestión de procesos, pero está más pensada como ejemplo que como solución final. Tiene un plugin de modelado de diagramas BPM para Eclipse. Es muy fácil integrarlo en un proyecto existente. No está orientado a Java Drools, aunque puede usarse y tiene buena documentación.
Camunda es una plataforma de código abierto para la gestión de flujos de trabajo y procesos de negocio. El proyecto está gestionado por una empresa de unos 30 empleados con sede en Berlín fundada en Abril de 2013 y con una filosofía prácticamente idéntica a la de Activiti (Open Source BPM Platform). El equipo de Camunda era parte importante de la comunidad de Activiti y se separaron para seguir su propio camino y crear su propia solución BPM comercial, una suite similar a BonitaSoft. La decisión de Camunda de separarse supuso una gran sorpresa y decepción a la comunidad de Activiti, quienes se referían a Camunda como “un ‘fork’ de Activiti, con el mismo ‘core’ y distinto nombre”.
Camunda no está asociado a ningún vendedor (Activiti es parte de Alfresco) y quizás por ahí estén los motivos de la separación. Su código es Open Source y muy modularizado. Tienen abundante documentación, incluida una extensa guía de cómo migrar de Activiti a Camunda. A día de hoy, la principal diferencia con Activiti es que Camunda, además de BPMN, se integra también con CMMN (Case Management Model & Notation) y con DMN (Decision Model & Notation), que son técnicas de modelado operacional bastante recientes (la versión 1.0 de CMMN fue lanzada por OMG en mayo de 2014).
En los puntos anteriores únicamente menciono los que considero “principales” desde mi punto de vista, que es puramente técnico. Estos proyectos son los que mayor actividad tienen dentro de sus comunidades de desarrollo y también son los que más documentación técnica ofrecen para poder integrar sus workflow de procesos en proyectos Java EE. Pero existen muchos otros proyectos BPM open source como Intalio o Orchestra. Aquí te dejo una lista de Java-Source.net donde podrás encontrar multitud de proyectos “Open Source Workflow Engine”, algunos de ellos basados en BPEL (Business Process Execution Language). Y este otro listado de la Wikipedia.
Deja un comentario