Передача данных между узлами. Как поддерживать их в чистоте?

#java #architecture #software-design

#java #архитектура #программное обеспечение-дизайн

Вопрос:

«Узлы» моего приложения организованы в виде древовидной структуры с родительскими и дочерними элементами:

  A---------B---------C---------D---------E
                               ---------F
  

A — верхний предок, а E и F — нижний потомок. Поток выполнения происходит от восходящей стороны к нисходящей стороне.

Каждый отдельный узел принимает определенные типы данных, которые им необходимо обработать. Таким образом, в проектном решении данные, которые могут получать узлы, изолированы друг от друга.

Теперь возникает проблема, допустим, узлам E и F нужны данные определенного типа, но они доступны только на узле C. Итак, мне нужен механизм для передачи этих данных с узла C вплоть до узлов E и F.

Решение 1. разрешить нодам-потомкам доступ к данным их узлов-предков. Итак, я могу просто добавить эти данные в узел C и получить их из узлов E и F. Что мне не нравится в этом решении, так это то, что все промежуточные узлы (включая C и D) будут содержать некоторые данные, которые им на самом деле не нужны. Для меня это звучит как проблема в управлении приложением в будущем.

Решение 2. Ввести класс временного хранилища, который можно использовать в C для хранения данных и считывать с узлов E и F (переносить данные туда, где это необходимо). Для меня это решение как-то звучит немного нечисто и усложняет приложение.

Итак, на моем месте вы бы выбрали какое решение или другое решение, которое я не вижу?

Поскольку я новичок в разработке программного обеспечения, любые комментарии, предложения от вас очень приветствуются.

Спасибо.

Комментарии:

1. Не могли бы вы добавить какой-нибудь код, чтобы было понятно?

2. Я вижу, что здесь помогает шина сообщений.

Ответ №1:

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

класс, который соединяет узел, должен обладать знаниями для распространения данных между узлами. поэтому лучшим вариантом является введение DataConnector CtoEDataConnector, который получит уведомление, как только C завершит свой процесс.как только он получит уведомление, он получит доступ к контейнеру данных C и извлечет данные и будет загружен в узел E.

это означает, что соединители данных должны быть добавлены во время соединения узлов друг с другом.