Является ли Обозреватель всего приложения правильным решением? - PullRequest
2 голосов
/ 01 февраля 2011

Я использую Reactive Framework в C #, и мне любопытно, является ли использование обозревателя приложений (Singleton Message Bus) достойной причиной? В карантинном разделе приложения это работает как очарование, но мне любопытно, есть ли у кого-нибудь мудрость, кричащая: «НЕТ! WTF ВЫ ДУМАЕТЕ!»

Техническая информация и теоретические знания приветствуются!

Ответы [ 2 ]

3 голосов
/ 01 февраля 2011

Я использовал такой подход в одном из моих старых приложений на C / C ++. У него есть то преимущество, что вы можете разъединять модули, но по моему опыту это быстро приводит к множеству проблем в больших приложениях:

  • Вы теряете контроль над тем, что действительно происходит в вашем приложении. Поскольку каждый модуль может прослушивать шину сообщений, также каждый модуль может влиять на любой другой модуль приложения.
  • Если шина сообщений является единственным способом уведомления наблюдателей, отправка уведомлений может иметь непредсказуемый эффект производительности.
  • Чтобы решить некоторые проблемы с производительностью, вы можете попытаться инициировать буферизацию сообщений (такие сообщения, как «Я сделаю много вещей, поэтому не реагируйте немедленно» и «Хорошо, я закончил, вы можете обработать все, что я тебе сказал "), но это может привести и к непредсказуемым последствиям.

Мой вывод заключается в том, что глобальная шина сообщений - хорошая идея для небольших приложений, но не для больших. Используя одну глобальную шину сообщений для разъединения всех ваших модулей, вы эффективно достигаете противоположного, поскольку все теперь связаны со всеми остальными, что усложняет в долгосрочной перспективе повторное распутывание приложения.

Я бы предложил сделать каждый модуль максимально независимым и использовать специализированных наблюдателей (см. Схему наблюдателей «Банды четырех»).

1 голос
/ 01 февраля 2011

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

...