2009-11-17 19 views
5

Ho un grafico a oggetti complessi per rappresentare la pianificazione dell'operazione. A un certo punto, devo serializzare l'intero grafico nell'interfaccia utente web (tramite XML/JSON) per consentire all'utente di modificare la pianificazione utilizzando un componente del diagramma di gantt basato su JavaScript. Dopo che l'utente ha terminato la modifica, lo stato del grafico nel livello Java/server deve essere sincronizzato con lo stato modificato.Qual è il modo migliore per sincronizzare lo stato del 2 oggetto grafico complesso

Vorrei chiedere la migliore strategia per implementare tale sincronizzazione di stato del grafico di oggetti complessi, ad es. come dovrebbero essere rappresentati i cambiamenti dello stato in modo tale che l'imitazione delle modifiche sul lato server possa essere semplificata? In che modo gli altri implementeranno questo?

FYI, il mio attuale stack tecnologico: JSF + Richfaces, Seam 2.1, Hibernate 3. Ma credo che la soluzione a questo problema possa essere utilizzata anche in altri stack tecnologici.

risposta

4

Vorrei suggerire di evitare la sincronizzazione dei due grafici ma registrare le operazioni di modifica come operazioni "Elimina nodo/Inserisci nodo/Sostituisci nodo". Invia queste operazioni al server e applicale al grafico originale.

Questa idea deriva dalla riscrittura di un AST (Abstract Syntax Tree). In eclipse JDT you have an AST from your source. Quando viene applicato un refactoring (ad esempio rinominare un metodo) dovrebbe essere possibile creare un'anteprima delle modifiche. Affinché ciò funzioni gli eventi di riscrittura (Delte/Insert/Replace) vengono registrati e applicati a una copia dell'AST. Da ciò viene generata l'anteprima. Se l'utente accetta gli eventi vengono applicati all'AST originale.

Il tuo problema è simile in questo modo, che hai due grafici oggetto che partono identici e dovrebbero essere modificati allo stesso modo. Questo dovrebbe essere molto più facile da implementare come operazione di sincronizzazione, basta registrare gli eventi mentre l'utente sta modificando il grafico.

0

Sto lavorando a un progetto su larga scala con lo stesso problema (normale?). I progettisti hanno implementato la seguente soluzione, basata su schema DTO e CMP2:

L'idea generale è che ciascun bean, che rappresenta un oggetto nel grafico, possa registrare le proprie modifiche. Pertanto, ogni bean ha una struttura aggiuntiva (set) in cui vengono memorizzate solo le chiavi (i nomi delle colonne) degli attributi (valori) del bean modificati. La logica del server utilizza questi suggerimenti per aggiornare i dati memorizzati. La logica del server può utilizzare questi suggerimenti per aggiornare solo le modifiche. (! Semplificato)

Il fagiolo stesso sembra un po 'come questo:

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; 
    } 
} 

Subrelations sono trattati di conseguenza, c'è un'altra struttura che registra quei grafici bambini, che devono essere eliminati.

Questo potrebbe anche essere uno schema j2ee standard, si prega di commentare se questo è il caso.

(a parte questo, preferisco la soluzione di Arne per i nuovi progetti!)

+0

Qual è il nome di questo modello? – bungrudi

+0

Come ho cercato di spiegare - non so, se questo è o segue un modello standard e mi piacerebbe sapere anche questo. –

Problemi correlati