IObservable/IObserver を利用して「神オブジェクト」を取り除くにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2275167

質問

私が現在取り組んでいるシステムには、インターフェイスと基本クラスとして定義されたコンポーネントが多数あります。システムの各部分には、システムの他の部分と相互作用する特定のポイントがいくつかあります。

たとえば、データ準備コンポーネントは、最終的にデータ処理部分に送​​信する必要があるデータを準備し、通信コンポーネントは、外部に中継するためにさまざまなコンポーネントにステータスを問い合わせる必要があります。

現在、私は「神オブジェクト」、つまりシステムのさまざまな部分を熟知したオブジェクトを使用して、システムのこれらの部分をつなぎ合わせています。ここでイベントを登録し、結果を向こうのメソッドに送り、ここでコールバック メソッドを作成し、そのメソッドの結果を向こうに返し、特定のアクションが「知っている」ため、多くのリクエストを処理のためにマルチスレッド キューに渡します。 STA スレッドなどで実行します。

便利ではありますが、この 1 つのタイプがシステム内の他のユーザーがどのように設計されているかをよく知っていることが気になります。イベント、メソッド、コールバックを公開したり、これらを使用したりできるインスタンスを提供できる、より汎用的なハブの方がはるかに好みです。

私は、リアクティブ フレームワークの IObservable/IObserver 機能についてさらに詳しく知り、.NET 4.0 に組み込まれる予定です (私はそう信じています)。

このパターンを活用して、「神のオブジェクト」を置き換えることはできますか?これはどうすればよいでしょうか?このパターンをこの特定の目的で使用するためのリソースはありますか?

役に立ちましたか?

解決

交換できるようです 神のオブジェクト ものによって MSDN ここで説明します:

Microsoft StreamInsightプラットフォームを使用して複雑なイベント処理(CEP)アプリケーションを作成するには、イベント、イベントを生成および消費するオブジェクト、およびイベントの処理に必要なビジネスロジックを含むテンプレートをクエリする構造を作成します。

(残念ながら) 私たちのチームはすぐに .Net 4.0 に移行するつもりはありません。そこで私たちは回避しました 神のオブジェクト MAF/MEFが提供するものと同様のカスタム・フレームワークを構築することによるシナリオ。これにより、Microsoft が呼ぶものを使用した分散ナレッジ ベースが作成されました。 アダプタ. 。各アダプターは、データやイベントなどを渡す独自のモジュールのみを担当します。共通点があります オペレーター データとイベントを受信して​​処理し、それぞれのアダプターに返します。

私の理解 IObservable & IObserver そう信じさせてくれる 神のオブジェクト 必要はありません。事実上、さまざまな部分内で何が起こっているかについての分散型知識ベースを作成することになります。これらのインターフェイスの明らかな利点は、 中間コミュニケーター (すなわち、アダプター) は必要なくなりました。したがって、知識の配布は実際には IObservable 派生クラス内にあります。このモデルは本質的に、 話者/応答者 関係 - 調停/仲裁クラスはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top