Descomponga una aplicación monolítica con JMIX Platform

En la versión 1.2.3 de la plataforma JMIX, surgen algunas características nuevas e interesantes. Una de las más interesantes es la característica de los componentes de la aplicación. En este artículo intentaremos comprender los casos de uso de ellos y dar un ejemplo de cómo usarlos.


De grandes bolas de barro y monolitos majestuosos


En los últimos años ha habido mucho debate sobre cómo descomponer los monolitos principalmente en términos de implementación. Los microservicios son una variante extrema de este enfoque. Otros enfoques parecen más moderados en comparación con una arquitectura monolítica real como los sistemas autocontenidos . Y finalmente está el final del espectro que, inconsciente o conscientemente, elige hacer una arquitectura monolítica (consulte la publicación de blog de @ DHH The Majestetic Monolith para obtener más información).

Todos estos enfoques se preocupan por la capa más externa de un monolito: los artefactos de despliegue. Aunque es la capa más importante en la que se debe pensar para evitar / no evitar las estructuras monolíticas, también hay otras capas que son notables.

El que queremos ver en este momento se refiere a los componentes dentro de un artefacto desplegable. Entonces están en el nivel de reutilización de código. Algo que ha estado allí durante mucho tiempo con algo como archivos DLL de Windows, Ruby Gems o archivos Jar.


Reutilización de código: ¿un problema resuelto?


Entonces, puede preguntar: ¿cuáles son los componentes de la aplicación en ese momento y por qué no podría resolverse con algo como archivos Jar simples? Bueno, con algo como archivos Jar simples puedes compartir mucho código. Pero hay situaciones en las que no solo desea un paquete para las definiciones de clase, sino una integración ligeramente mejor con el ecosistema real en el que se encuentra con su aplicación.

Un muy buen ejemplo de esto es el sistema de plugins Grails . Con un complemento de Grails hay una integración adicional al marco de Grails en comparación con un paquete Jar simple. En un complemento de Grails, puede registrar los Spring beans necesarios para este complemento, crear clases de dominio y predefinir las IU para la parte de la aplicación que está encapsulada en el complemento. Principalmente, la diferencia es que, dado que Grails es un marco de trabajo de pila completa, es una buena idea tener un modelo de composición que también sea de pila completa.

Los componentes de la aplicación JMIX son desde una vista de 10'000 pies más o menos lo mismo, pero solo para aplicaciones JMIX. Así que profundicemos un poco más en lo que podemos hacer con esto y cuáles son los casos de uso.


Componentes de la aplicación como una forma de descomponer su monolito


Hasta donde entiendo, la idea de descomposición para la aplicación JMIX ya había estado en el marco bajo el nombre de "proyecto base", pero los documentos no estaban hablando realmente de eso. Sin embargo, en la versión 1.2.3, la idea ha sido repensada y generalizada. Esto es al menos lo que sugiere el término "componentes de la aplicación".

Hay tres casos de uso comunes que me vienen a la mente para esta función. Permiten que el resultado final comparta el código en varios grados o lo personalice de una manera más estructurada. Revisaremos estos casos de uso en este momento.


1. plataforma de línea de productos

Un ejemplo del primer caso sería algo así como crear un MappedSuperclass para datos de referencia o para entidades con validez temporal. O si desea compartir ciertos escenarios de IU, como un asistente en una superclase o una clase auxiliar. Pero en este primer escenario, la lógica empresarial principal permanece en las aplicaciones que usan este componente de aplicación.


2. Composición del componente

La siguiente opción posible sería útil si desea crear un monolito de implementación, pero dentro de estos monolitos hay varias partes independientes como recursos humanos, control y gestión de pedidos dentro de su aplicación ERP. Estas partes podrían venderse de forma independiente, pero deberían terminar dentro de un archivo de guerra en el que solo tengo que iniciar sesión una vez y permanecer en esta aplicación para "crear un nuevo empleado" y "rechazar un pedido". En este escenario, cada parte puede ser un componente de aplicación JMIX y, a continuación, hay una aplicación que literalmente no tiene código comercial pero que solo incluye estos componentes.


3. Personalizaciones de productos

La tercera opción es algo como las personas en Haulmont describen en su artículo: Cómo desarrollar un producto altamente personalizable . En este caso, tienen un producto base como esta solución de gestión de taxis, que es el componente de la aplicación. Luego, hay personalizaciones sobre el componente que solo ajustan la aplicación principal muy ligeramente. Esto podría tener diferentes capas de personalización como lo hicieron con Sherlock .


Los tres casos de uso difieren principalmente en la cantidad de código que se coloca en los componentes y obviamente en el propósito del uso. Por supuesto, estos patrones de uso de componentes se pueden combinar si es necesario. Por ejemplo, una composición de componentes también puede tener una plataforma de línea de productos para cada (o un subconjunto) de los componentes. Las personalizaciones de productos también pueden ser parte de este escenario para personalizar la aplicación como un todo o solo ciertos componentes comerciales.

En realidad, hay un cuarto caso de uso que realmente no voy a analizar, ya que actualmente no es posible en JMIX, pero es muy interesante: compartir componentes en los mercados. Grails tiene un mecanismo central de complementos que permite a los usuarios compartir complementos con la comunidad. Puede pensar en ellos como complementos de código abierto para el marco. Pero también se pueden implementar como extensiones pagas para problemas comerciales comunes, como se hace con los componentes de la aplicación JMIX: informes, fts, gráficos y bpm . Actualmente, JMIX solo tiene un canal de distribución para sus propios componentes comerciales, pero probablemente no sea un gran problema hacer que algo así funcione.

Si tiene alguna pregunta sobre ese tema, puede dejar un comentario o escribirme un correo electrónico.