#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.
это означает, что соединители данных должны быть добавлены во время соединения узлов друг с другом.