¿Cómo debo empezar a la hora de desarrollar un sistema basado en módulos o complementos?

StackOverflow https://stackoverflow.com/questions/78004

  •  09-06-2019
  •  | 
  •  

Pregunta

Tengo la intención de desarrollar un sistema que esté completamente basado en módulos.La base del sistema debe tener soporte para conocer los complementos, iniciarlos y poder proporcionar formas para que esos módulos se comuniquen.Idealmente, uno debería poder colocar nuevos módulos y retirar los módulos no utilizados a voluntad, y los módulos deberían poder utilizar la funcionalidad de los demás si está disponible.

Este sistema debería usarse como base para sistemas de simulación donde suceden muchas cosas en diferentes módulos, y es posible que otros módulos quieran hacer algo basado en eso.

El sistema que pretendo desarrollar será en Java.A mi modo de ver, pretendo tener una carpeta con una subcarpeta para cada módulo que incluya un XML que describa el módulo con información como el nombre, tal vez qué eventos podría generar, cosas así.Supongo que podría necesitar escribir un ClassLoader personalizado para solucionar este problema.

La cuestión es que no sé si mi idea realmente se sostiene y, por supuesto, tengo la intención de construir un prototipo funcional.Sin embargo, nunca antes había trabajado en un sistema verdaderamente modular y no estoy realmente seguro de cuál es la mejor manera de abordar este problema.

¿Donde debería empezar?¿Existen problemas y trampas comunes que se encuentran al desarrollar este tipo de sistema?¿Cómo hago para que los módulos hablen entre sí mientras mantengo el aislamiento (es decir, se elimina un módulo y otro módulo que lo estaba usando permanece cuerdo)?¿Existe alguna guía, especificaciones o artículo que pueda leer y que pueda darme algunas ideas sobre por dónde empezar?Sería mejor si estuvieran basados ​​en Java, pero esto no es un requisito, ya que lo que busco ahora son ideas, no código.

Se agradece cualquier comentario.

¿Fue útil?

Solución

Definitivamente deberías mirar OSGi.Tiene como objetivo ser el Mecanismo de componente/complemento para Java.Le permite modularizar su código (en los llamados paquetes) y actualizar paquetes en tiempo de ejecución.También puede ocultar completamente los paquetes de implementación del acceso no deseado por parte de otros paquetes, por ejemplo.solo proporcione la API.

Eclipse fue el primer proyecto importante de código abierto en implementar y utilizar OSGi, pero no lo aprovecharon por completo (sin instalaciones/actualizaciones de complementos sin reinicios).Sin embargo, si comienza desde cero, obtendrá un marco muy bueno para un sistema de complementos.

Apache Félix es una implementación completa de código abierto (y hay otras, como eclipse equinoccio).

Otros consejos

Sin entrar en muchos detalles, deberías mirar Primavera y una familiarización con OSGI o los marcos Eclipse RCP también le brindará algunos conceptos fundamentales que deberá tener en cuenta.

Otra opción es la Cargador de servicios agregado en Java 1.6.

Hay muchas formas de hacerlo pero algo sencillo puede ser utilizando Reflection.Escribe en su archivo XML el nombre del archivo (eso sería una clase en realidad).Luego puede verificar de qué tipo es y crearlo nuevamente con reflexión.La clase podría tener una interfaz común que le permitirá encontrar si el archivo/clase externo es realmente uno de su módulo.Aquí hay alguna información sobre Reflexión.

También puedes usar un marco precodificado como este de SourceForge.Texto del enlace eso le dará un buen primer paso para crear un módulo/complemento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top