Синхронизация двух отдельных структур с одними и теми же основными данными - PullRequest
1 голос
/ 06 апреля 2010

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

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

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


A
|_
   B
   E
C
|_
  D

A
|_
  B
  C
  D
  E

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

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

1 Ответ

0 голосов
/ 12 апреля 2010

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

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

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

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

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

...