2009-11-17 12 views
5

Tengo un gráfico de objetos complejo para representar la programación de operaciones. En un momento dado, tengo que serializar todo el gráfico en la interfaz de usuario web (a través de XML/JSON) para permitir que el usuario modifique el cronograma utilizando un componente de diagrama de Gantt basado en JavaScript. Después de que el usuario finalizó la edición, el estado del gráfico en la capa Java/servidor debe sincronizarse con el estado modificado.Cuál es la mejor manera de sincronizar el estado del gráfico de objetos complejos 2

Me gustaría preguntar acerca de la mejor estrategia para implementar dicha sincronización de estado del gráfico de objeto complejo, p. ¿Cómo deberían representarse los cambios del estado para que sea más fácil imitar los cambios en el lado del servidor? ¿Cómo implementarían esto otros?

FYI, mi pila de tecnología actual: JSF + Richfaces, Seam 2.1, Hibernate 3. Pero creo que la solución a este problema también se puede utilizar en otra tecnología de pila.

Respuesta

4

Sugiero evitar sincronizar los dos gráficos, pero registrar las operaciones de edición como operaciones "Eliminar nodo/Insertar nodo/Reemplazar nodo". Envíe estas operaciones al servidor y aplíquelas al gráfico original.

Esta idea proviene de la reescritura de un AST (Árbol de sintaxis abstracta). En eclipse JDT you have an AST from your source. Cuando se aplica una refactorización (por ejemplo, cambiar el nombre de un método), debería ser posible crear una vista previa de los cambios. Para que esto funcione, los eventos de reescritura (Delte/Insertar/Reemplazar) se graban y se aplican a una copia del AST. De esto se genera la vista previa. Si el usuario acepta, los eventos se aplican al AST original.

Su problema es similar de esa manera, que tiene dos gráficos de objetos que comienzan idénticos y deben modificarse de la misma manera. Esto debería ser mucho más fácil de implementar como una operación de sincronización. Solo tiene que registrar los eventos mientras el usuario está modificando el gráfico.

0

Estoy trabajando en un proyecto a gran escala con el mismo problema (¿normal?). Los diseñadores implementaron la siguiente solución, basada en el patrón DTO y CMP2:

La idea general es que cada bean, que representa un objeto en el gráfico, puede registrar sus propios cambios. Por lo tanto, cada bean tiene una estructura (conjunto) adicional donde se almacenan las claves (nombres de columna) de los atributos (valores) de bean cambiados. La lógica del servidor usa estas sugerencias para actualizar los datos almacenados. La lógica del servidor puede usar estas sugerencias para actualizar solo los cambios. (! Simplificado)

El grano en sí parece un poco como esto:

public TableBean { 

    private String column1; 

    // ... more fields 

    private Set<String> changes = new Set<String>(); 

    public String getColumn1() { 
    return column1; 
    } 

    public void setColumn1(String value) { 
    if (!value.equals(column1)) { 
     changes.add("column1"); 
     column1 = value; 
    } 
    } 

    public Collection<String> getChanges() { 
    return changes; 
    } 
} 

subrelaciones son tratados en consecuencia, no hay otra estructura que registra los gráficos de los niños, que tienen que ser eliminados.

Esto incluso puede ser un patrón j2ee estándar, por favor comente si este es el caso.

(aparte de esto, estoy a favor de la solución de Arne para nuevas construcciones!)

+0

Cuál es el nombre de este patrón? – bungrudi

+0

Como traté de explicar, no sé si esto es o sigue un patrón estándar y me gustaría saber esto también. –

Cuestiones relacionadas