Цитата:
|
MenuHolder нужен чтобы принимать сообщения от главного объекта, и спускать ниже - гланый объект не знает, что есть какие-то кнопки, они зарегистрированы в холдерах.
|
Это можно решить как раз глобальной (общей) шиной сообщений. Т.е. все кнопки зарегистрированы в ней. Кнопки все равно знают свой id (события то отправляют да и им доставляют сообщения по этому id) и могут реагировать на сообщения, специально отправленные для "кнопки с указанным id". Причем сообщения будут именно уровня кнопок (set enabled/set disabled). Примерно то же, что вы предлагаете, только механизм доставки не "по дереву", а через общую шину.
Или можно оставить и как у вас - "локальную" шину для меню, при этом транслировать сообщения из "глобальной" шины в "локальную". Подход удобен для объектов с различным временем жизни. Например, для какого-то диалога временно подписать его на шину, а потом отписать.
Мои замечания касаются даже не столько идеологии (там все нормально), а технической реализации. Чтобы не писать отдельно "диспетчеризацию" для MenuHolder, подобную же диспетчеризацию - для диалогов и т.п. А чтобы можно было взять "message bus" и "message bus translator", например, и использовать везде их. В общем, на это все нужно в коде смотреть.