2012-04-05 17 views
5

Estoy trabajando en un proyecto. Estoy tratando de implementar el núcleo como archivo jar independiente que se puede ejecutar desde la línea de comandos o incluso un servicio de Windows. El núcleo sería responsable de hacer un seguimiento de un par de archivos y enviar algunos correos electrónicos de notificación. La pregunta es, ¿cuál sería la mejor idea para mantener GUI totalmente independiente?cómo mantener la GUI de Java totalmente separada de Core

Las necesidades GUI siguiente iteración con el núcleo

  • lista de envío de archivos
  • recibir notificaciones de núcleo con respecto a cuánto se han procesado los archivos
  • recibir notificaciones de estado con respecto a los archivos de ejemplo, enviar/Procesamiento/Error al mostrarse en la GUI
  • recibir la información si hay mensajes entrantes del núcleo

Tenía este software desarrollado en Delphi y C. C se utilizó para codificar la lógica del núcleo y el uso de mensajes y devoluciones de llamada de Windows, registré Delphi GUI en C dll/service. Estoy confundido sobre cómo implementarlo en Java.

  • ¿Patrón de observador?
  • Comunicación cliente/servidor pequeña entre core y gui?

P.S: La razón por la que lo estoy discutiendo aquí es para aprender y explorar un mejor diseño para dichos softwares cuando se codifica en Java. No estoy pidiendo la documentación del Observer Pattern o la arquitectura del servidor del cliente. Podría haber otros medios posibles de los que no tengo conocimiento. Así que estoy esperando cualquier idea, diseño o marco.

Respuesta

3

Oberserver Pattern es realmente la respuesta correcta para tres de sus 4 casos de uso.

En el nivel de la descripción que usted puede tener la siguiente interfaz implementada por su núcleo:

public interface Core { 

    sendFiles(List<File> files); 
    registerProgressListener(ProgressListener listener);    
    registerStatusListener(StatusListener listener); 
    registerMessageListener(MessageListener listener); 
} 

Las interfaces de los oyentes se verá muy similar a éste

public interface ProgressListener{ 
    madeProgress(ProgressEvent) 
} 

ProgressEvent (y el otro Clases de eventos) deben ser objetos de valor, por ejemplo

public class ProgressEvent { 
    public final double progress; 
    public final String fileName; 
    public ... // constructor 
} 

es probable que desee que su núcleo y su interfaz gráfica de usuario que se ejecutan en diferentes hilos. De lo contrario, su GUI no reaccionaría ante ningún evento mientras el núcleo se está ejecutando. Dado que el núcleo no debería saber nada acerca de la GUI, la transferencia entre subprocesos debe hacerse por la GUI, es decir, los oyentes deben tener cuidado de usar SwingUtilities.invokeLater o invokeAndWait para actualizar la GUI.

+0

perfectos. esperando más respuestas antes de seleccionar tu respuesta como respuesta. –

1

Quizás esta respuesta se vea un poco en la vieja escuela, pero ¿qué hay de los viejos IPCs simples?

Haga que la GUI crea una instancia del núcleo como un hilo separado, y comuníquese solo a través de colas de mensajes (java.util.concurrent. *). Úselos para enviar una lista de archivos, eventos, informes de progreso y prácticamente cualquier cosa.

Luego puede enviar varias interfaces, siempre y cuando todas las interfaces conozcan el punto de entrada para el núcleo, usted está en el negocio.

+0

No hay necesidad de ejecutar la interfaz gráfica y el núcleo en diferentes procesos –