Pregunta

¿Cómo se hace modular una aplicación de escritorio Java? ¿Cómo deben clasificarse los módulos?

¿Fue útil?

Solución

Como objetivo de diseño, la modularidad significa que desea tener una aplicación compuesta de partes separadas (módulos) donde cada parte tiene su área de responsabilidad y contiene todas las clases relacionadas con esa área (high cohesion ), y la comunicación entre esas partes se realiza a través de interfaces estrechas, bien definidas y documentadas ( acoplamiento suelto ).

Usted logra esto planificando su diseño de antemano y ajustando esos elementos y refactorizando el código constantemente durante la implementación.

Es útil hacer una diferencia entre módulos técnicos como GUI, comunicación de red o acceso a bases de datos (que a menudo forman capas, aunque pueden subdividirse en varios módulos) y módulos de dominio que contienen la lógica específica de la aplicación y a menudo no forman capas.

Otros consejos

Eche un vistazo a las tecnologías OSGi. Cada módulo de su aplicación (llamado paquete) es un jar separado, y OSGi se encarga de la resolución de dependencia y de cargar dinámicamente las rutas de clase de paquete, etc.

Para aplicaciones de escritorio, recomendaría encarecidamente mirar DA-Launcher desde www.dynamicjava.org . Hace que implementar SOOO sea mucho más fácil. También tienen algunas cosas como JPA dinámico que son útiles para cualquier aplicación OSGi.

¿Te refieres a modular como Eclipse?

Si basa su aplicación de escritorio java en Eclipse RCP o NetBeans RCP, obtendrá modularidad "gratis". (casi ;-))

La respuesta a su pregunta realmente depende de qué quiere decir con " modular " .

Hay varios niveles de preocupaciones que debe tener en cuenta al hacer que su aplicación sea modular.

En primer lugar, debe considerar si la " modularidad " lo que busca es modularidad arquitectónica , modularidad de tiempo de implementación o modularidad de tiempo de ejecución .

En cualquier caso, cada nivel consecutivo implica todos los niveles anteriores.

Para empezar: para que su aplicación sea modular, debe comenzar desde la arquitectura. Separe sus inquietudes en partes de corte limpio bien definidas que tengan interfaces bien definidas para el "mundo exterior". Uso de buenos patrones de diseño y inyección de dependencia y diseño para la capacidad de prueba de la unidad hace mucho para lograr una buena separación de las preocupaciones que es la base del diseño modular.

Comience desde pequeño pero tenga en cuenta la imagen grande. Cuando diseñe trozos (o módulos) un poco más grandes de su sistema, asegúrese de que tengan la menor cantidad posible de áreas superpuestas. Cada módulo no debe hacer casi suposiciones sobre el entorno en el que se ejecutan y debe responder a una sola preocupación. Cualquier servicio que requiera de sus pares debe proporcionarse explícitamente mediante una inicialización externa (preferiblemente usando inyección de dependencia para pegar los módulos en una aplicación de trabajo).

Si su arquitectura es modular, es una tarea fácil separar las preocupaciones en sus propias unidades de implementación (en forma de proyectos , tarros , paquetes , complementos , extensiones o lo que sea) y puede comenzar a mezclar y combinar fácilmente varios módulos durante la implementación para obtener el conjunto de características exactas que necesita para el particular instancia de aplicación Esto es lo que quiero decir con modularidad del tiempo de implementación .

Un largo camino para habilitar la modularidad del tiempo de implementación son marcos de Inyección de dependencia como Guice , Spring framefork y otros.

Modularidad del tiempo de ejecución , según veo, es algo similar a la modularidad proporcionada por los complementos de Eclipse y NetBeans o las extensiones de Mozilla donde puede cambiar la configuración y el conjunto de los módulos de su aplicación después de la implementación / instalación.

Esto implica algún tipo de arquitectura e infraestructura que reconoce nuevos complementos / extensiones en el momento de la inicialización de la aplicación o dinámicamente en tiempo de ejecución.

Latter también significa que todos sus módulos deben construirse con la suposición implícita de que cualquier servicio que utilice un módulo puede desaparecer fácilmente en cualquier momento, haciendo un esfuerzo adicional para garantizar la solidez del código que se ejecuta en este mundo volátil.

También recomendaría Eclipse RCP o echar un vistazo a Netbeans RCP. Los dos son muy parecidos. Una cosa que los separa es que Eclipse RCP usa bibliotecas nativas de GUI en lugar de Swing, que usa Netbeans.

Pros y contras es que Elcipse podría ser un poco más rápido, aunque usted está más limitado al tipo de controles que ofrece el sistema operativo. Netbeans utiliza Swing, que puede ser más familiar para la mayoría de los desarrolladores de Java, y la capacidad de desarrollar controles personalizados es infinita.

Ha pasado un tiempo desde que trabajé con Eclipse RCP, así que probablemente estoy equivocado sobre el desarrollo de controles personalizados en Eclipse RCP.

¡Lo que tienen en común es que desarrollar aplicaciones de escritorio inteligentes y modulares es divertido y obtienes aplicaciones de aspecto profesional en mucho menos tiempo!

¡Buena suerte!

También puede echar un vistazo a Java Plug-in Framework,

http://jpf.sourceforge.net/

  

JPF puede mejorar enormemente la modularidad   y extensibilidad de sus sistemas Java   y minimizar el soporte y mantenimiento   costos.

prueba con Spring RCP

http://www.springsource.org/spring-rcp

al organizar su parte GUI de la aplicación ...

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