2010-04-06 8 views
1

J'ai plusieurs structures à gérer dans mon application. Tous les liens vers les mêmes enregistrements, et l'un d'eux pourrait être considéré comme le «maître» en ce sens qu'il reflète les relations réelles contenues dans les fichiers sur le disque. Les autres structures sont utilisées pour "faire sortir" les éléments de la conception principale pour les commandes d'achat et de travail. J'ai du mal à trouver un modèle qui traite correctement les modifications apportées aux données de base.Synchroniser deux structures séparées avec les mêmes données de base

À titre d'exemple, les arbres suivants pourraient se référer aux mêmes données:

A 
|_ 
    B 
    |_ 
    C 
    |_ 
     D 
|_ 
    E 
    |_ 
    B 
    |_ 
     C 
     |_ 
     D 


A 
|_ 
    B 
    E 
C 
|_ 
    D 

A 
|_ 
    B 
    C 
    D 
    E 

Ces structures secondaires suivent des règles internes, mais leur structure globale est généralement déterminée par l'utilisateur. Dans tous les cas (y compris le maître), n'importe quel élément peut être utilisé à plusieurs endroits et dans plusieurs arbres. Lorsque j'ajoute un enfant à un élément de l'arborescence, je veux créer automatiquement la structure secondaire pour chaque instance de l'élément "master" ou au moins annoncer la situation à l'utilisateur et lui permettre de générer manuellement les données requises pour le arbres secondaires.

Y a-t-il un motif qui pourrait s'appliquer à cette situation? Je l'ai traité comme un problème de vue, mais il s'avère plus compliqué que cela lorsque vous regardez la génération initiale des données.

Répondre

0

Une implémentation en arbre devrait être un bon point de départ. La copie principale sera l'arbre complet.

Les noeuds dans les copies peuvent être des objets composites qui contiennent les données et une référence au noeud respectif dans l'arborescence principale. Lorsqu'un enfant est ajouté ou toute autre modification apportée à un noeud dans l'une des copies, le noeud peut envoyer un message à l'arborescence principale avec la référence du noeud correspondant dans l'arborescence principale et les détails de la modification.

Le maître se modifierait alors lui-même et mettrait à jour les autres copies.

La gestion des événements peut être difficile car vous devez vous assurer de ne pas rendre le processus entier cyclique.

+0

Salut Prachi, Je cherche des suggestions sur la façon de gérer la synchronisation des structures, pas sur la structure de base elle-même - Je suis contrainte d'utiliser des structures arborescentes pour toutes les données impliquées. Merci pour votre réponse, cependant. –

+0

Un bus d'événements peut être utile lorsque chaque copie du maître peut être enregistrée en tant qu'éditeur. Lorsqu'une copie est mise à jour, elle informe le contrôleur de bus de la mise à jour. Le contrôleur de bus peut envoyer des événements au maître et les autres copies à propos de la mise à jour. – Prachi

Questions connexes