Я использовал такой подход в одном из моих старых приложений на C / C ++. У него есть то преимущество, что вы можете разъединять модули, но по моему опыту это быстро приводит к множеству проблем в больших приложениях:
- Вы теряете контроль над тем, что действительно происходит в вашем приложении. Поскольку каждый модуль может прослушивать шину сообщений, также каждый модуль может влиять на любой другой модуль приложения.
- Если шина сообщений является единственным способом уведомления наблюдателей, отправка уведомлений может иметь непредсказуемый эффект производительности.
- Чтобы решить некоторые проблемы с производительностью, вы можете попытаться инициировать буферизацию сообщений (такие сообщения, как «Я сделаю много вещей, поэтому не реагируйте немедленно» и «Хорошо, я закончил, вы можете обработать все, что я тебе сказал "), но это может привести и к непредсказуемым последствиям.
Мой вывод заключается в том, что глобальная шина сообщений - хорошая идея для небольших приложений, но не для больших. Используя одну глобальную шину сообщений для разъединения всех ваших модулей, вы эффективно достигаете противоположного, поскольку все теперь связаны со всеми остальными, что усложняет в долгосрочной перспективе повторное распутывание приложения.
Я бы предложил сделать каждый модуль максимально независимым и использовать специализированных наблюдателей (см. Схему наблюдателей «Банды четырех»).