2011-01-31 6 views
2

C#でReactiveフレームワークを使用していますが、アプリケーションワイドオブザーバ(Singleton Message Bus)を使用することが合理的な理由であるかどうか不思議です。アプリケーションの隔離されたセクションでは、それは魅力のように機能しますが、誰も悲鳴を上げる知恵を持っているなら、私は興味があります。「いいえ、あなたは思っています!アプリケーション全体のObserverは有効なソリューションですか?

テクニカルインプットと理論パターン知識は歓迎以上のものです!

+0

"メッセージバス"について聞いたことがありません。誰かがこのトピックに関するいくつかの情報を得ることができるリンクをいくつか提供してください。 –

+0

「私のクラスメソッドを保護するかプライベートにするべきか」というのと同じような質問です。同じ答え。 –

+0

私はRxについて非常に興奮しているので、短いコード例に非常に興味があります。その「グローバル」オブザーバーをどのようにセットアップしたか、それをどのように使っているかの簡単な例を示すことができますか? – stakx

答えて

3

私はこれまでのC/C++アプリケーションの1つでこのようなアプローチを使用しました。それはあなたがモジュールを切り離すことができるという利点がありますが、私の経験では、それはすぐに大きなアプリケーションの問題の多くにつながる:

  • あなたが本当にあなたのアプリケーション内で何が起こっているかのコントロールを失います。すべてのモジュールがメッセージバスを聴くことができるので、すべてのモジュールもアプリケーションの他のすべてのモジュールに影響を与えることができます。
  • メッセージバスがオブザーバに通知する唯一の方法である場合、通知を送信するとパフォーマンスが予測できないことがあります。
  • パフォーマンス上の問題のいくつかを解決するには、バッファリングメッセージ(「たくさんのことをするのですぐに反応しない」や「OK、完了しました。私があなたに言ったすべて)」しかし、これは予測不可能な効果につながるかもしれません。

結論として、グローバルなメッセージバスは、小さなアプリケーションではいいアイデアですが、大きなものではありません。 1つのグローバルメッセージバスを使用してすべてのモジュールをデカップリングすることで、効果的にその逆を達成することができます。誰もが他のメンバーにリンクしているため、長期的にはアプリケーションを解くのが難しくなります。

すべてのモジュールをできるだけ独立させ、特殊なオブザーバーを使用することをお勧めします(Gang Of Fourのオブザーバーパターンを参照)。

+0

恐ろしい!ありがとう、これは私が探していたものです。 –

1

このパターンは、アプリコンポーネント間の提携を減らすために広く使用されています。私はいくつかのプロジェクトでそれを使用しました。本当にとても快適で便利です。 私は一般的にパターンについて話していますが、Reactiveフレームワークでどのように実装されているのかわかりません。

関連する問題