2010-04-06 3 views
1

У меня есть несколько структур для поддержки в моем приложении. Все ссылки на одни и те же записи, и один из них можно считать «мастером» в том, что он отражает фактические отношения, хранящиеся в файлах на диске. Другие структуры используются для «вызова» элементов основного дизайна для заказов на покупку и работу. Я изо всех сил пытаюсь найти шаблон, который соответствующим образом связан с изменениями основных данных.Синхронизация двух отдельных структур с теми же основными данными

В качестве примера, следующие деревья могут относиться к тем же данным:

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


A 
|_ 
    B 
    E 
C 
|_ 
    D 

A 
|_ 
    B 
    C 
    D 
    E 

Эти вторичные структуры следуют внутренние правила, но их общая структура, как правило, определяется пользователем. Во всех случаях (включая мастера) любой элемент может использоваться в нескольких местах и ​​в нескольких деревьях. Когда я добавляю ребенка к любому элементу в дереве, я хочу либо автоматически построить вторичную структуру для каждого экземпляра элемента «master», либо, по крайней мере, рекламировать ситуацию пользователю и разрешить им вручную генерировать данные, необходимые для вторичные деревья.

Есть ли какой-либо шаблон, который может применяться к этой ситуации? Я рассматривал это как проблему с представлением, но это оказывается более сложным, чем когда вы смотрите на начальное генерирование данных.

ответ

0

Реализация дерева должна быть хорошей отправной точкой. Основной копией будет полное дерево.

Узлы в копиях могут быть составными объектами, которые содержат данные и ссылку на соответствующий узел в основном дереве.

Когда ребенок добавлен или какие-либо другие изменения происходят на узле в одной из копий, узел может отправить сообщение в основное дерево с ссылкой соответствующего узла в дереве мастера и сведения об изменении.

Затем мастер изменит себя и обновит другие копии.

Обработка событий может оказаться сложной задачей, потому что вам необходимо убедиться, что весь процесс не цикличен.

+0

Привет, Prachi. Я ищу предложения о том, как обрабатывать синхронизацию структур, а не от базовой структуры - мне приходится использовать древовидные структуры для всех задействованных данных. Спасибо за ваш ответ. –

+0

Шина событий может быть полезна там, где каждая копия мастера может зарегистрироваться как издатель. Когда копия обновляется, она позволяет контроллеру шины знать об обновлении. Контроллер шины может отправлять события мастеру и другим копиям об обновлении. – Prachi

Смежные вопросы